亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 35
粉絲 3
評論 0
訪問量 31169
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
12月5日作業(yè) php 設(shè)計模式
隨風(fēng)
原創(chuàng)
840人瀏覽過

將課堂代碼全部上機操作

Demo1

`<?php
namespace gzg_05;

// PDO打開全局變量 如不打開 調(diào)用時需要 加 \PDO
use PDO;
// 單例模式

// 空類
class Temp{
//…
}

//實例化 兩個類
$obj1 = new Temp();
$obj2 = new Temp();
var_dump($obj1,$obj2);
echo ‘<br>‘;

var_dump($obj1 === $obj2);
echo ‘<hr>‘;

// 單例模式原理
class Demo1
{
// 目前 只能在類中的內(nèi)部將類實例化
// 當(dāng)前類的實例 用于實例判斷
public static $instance = null;

//構(gòu)造方法私有化
private function __construct()
{
}
// 實例化當(dāng)前類的方法

  1. public static function getInstance()
  2. {
  3. // 實例化當(dāng)前類,并返回類實例/對象
  4. // 判斷當(dāng)前類是否已經(jīng)被實例化過了,如果沒有的話就實例化,如果已實例化,就返回它

// self = static 在這里這兩個都能用 在場景中用 static 不再用self
if(is_null(self::$instance))
{
// new 一個內(nèi)部類
self::$instance =new self();
// $demo =new demo();
}

  1. return self::$instance;
  2. }
  3. // 禁用克隆魔術(shù)方法
  4. private function __clone()
  5. {
  6. // TODO: Implement __clone() method.
  7. }

}
// 類實例化 靜態(tài)實例化 Demo:: 實現(xiàn) 公共的 new Demo 實現(xiàn)
$obj3 = Demo1::getInstance();
$obj4 = Demo1::getInstance();
var_dump($obj3,$obj4);
echo ‘<br>‘;
var_dump($obj3 === $obj4);
echo ‘<hr>‘;

// 單例模型應(yīng)用場景 self 全部變更為static
class Db
{
// 目前 只能在類中的內(nèi)部將類實例化
// 當(dāng)前類的實例
public static $pdo = null;

  1. // 構(gòu)造方法私有化
  2. private function __construct(...$conn)
  3. {
  4. $dsn = $conn[0];
  5. $username =$conn[1];
  6. $password =$conn[2];
  7. static::$pdo = new PDO($dsn,$username,$password);
  8. }
  9. // 實例化當(dāng)前類的方法 傳參使用
  10. public static function getPdo(...$conn)
  11. {
  12. // 實例化當(dāng)前類,并返回類實例/對象
  13. // 判斷當(dāng)前類是否已經(jīng)被實例化過了,如果沒有的話就實例化,如果已實例化,就返回它
  14. if (is_null(static::$pdo)){
  15. // 構(gòu)造函數(shù)不需要返回
  16. new static(...$conn);
  17. }
  18. return static::$pdo;
  19. }
  20. // 禁用克隆魔術(shù)方法
  21. private function __clone()
  22. {
  23. // ...
  24. }

}

$conn = [‘mysql:host=localhost;dbname=gzg’,’root’,’root’];
$pdo = Db::getPdo(…$conn);
print_r($pdo->query(‘SELECT * FROM users‘)->fetchAll());

`

Demo2

`<?php
namespace gzg_05;
// 工廠模式: 用于批量創(chuàng)建類的實例/對象
use mvc\Facade;

class Demo2
{
//….
}
// file1.php
$obj = new Demo2();
// file2.php
$obj = new Demo2();
// file3.php
$obj = new Demo2();

class Test1
{
public function __construct($arg1)
{
echo ‘對象創(chuàng)建成功, 參數(shù)是: ‘ . $arg1;
}
}

class Test2
{
public function __construct($arg1, $arg2)
{
echo ‘對象創(chuàng)建成功, 參數(shù)是: ‘ . implode(‘, ‘, [$arg1, $arg2]);
}
}

class Test3
{
public function __construct($arg1, $arg2, $arg3)
{
echo ‘對象創(chuàng)建成功, 參數(shù)是: ‘ . implode(‘, ‘, [$arg1, $arg2, $arg3]);
}
}
// 工廠類, 專用于創(chuàng)建類實例
class Factory
{
public static function create($className, …$arg)
{
return new $className(…$arg);
}
}

//echo Test1::class; // _1205\Test1: 完整的類名, 帶有命名空間的
// 用工廠類來創(chuàng)建類實例/對象
Factory::create(Test1::class,abc);
echo ‘<br>‘;
$test1 = Factory::create(Test1::class,abc);
var_dump($test1);
echo ‘<br>‘;
Factory::create(Test2::class,123,200);
echo ‘<br>‘;
Factory::create(Test3::class,aabb,123,asf);`

Demo3

`<?php
namespace gzg_05;
// 依賴注入: 解決對象調(diào)用之間耦合
// 工作類

class Person
{
// 要依賴的外部對象
private $car=null;
// 在構(gòu)造方法中將依賴的外部對象全部實例化
// 注入點放到構(gòu)造方法中
public function __construct()
{
$this->car =new Car();
}
// 外部對象執(zhí)行一個動作
public function work()
{
return $this->car->drive();
}

}
// 依賴的外部類
class Car
{
public function drive()
{
return ‘111111111’;
}
}

// 實例化類
$person = new Person();
echo $person->work();
echo ‘<hr>‘;

/*/
//car = new Car() 在類外調(diào)用
class Person1
{
// 要依賴的外部對象
private $car = null;

  1. // 在構(gòu)造方法中將依賴的外部對象全部實例化
  2. // 注入點放到構(gòu)造方法中
  3. public function __construct(Car $car)
  4. { //類外調(diào)用后傳參
  5. $this->car = $car;
  6. }
  7. // 外部對象執(zhí)行一個動作
  8. public function work()
  9. {
  10. return $this->car->drive();
  11. }

}

// 依賴的外部類
class Car1
{
public function drive()
{
return ‘開車去上班’;
}
}

// 實例化類
//類外實例化
$car = new Car();
//給構(gòu)造函數(shù)傳參
$person = new Person1($car);
echo $person->work();
echo ‘<hr>‘;

`

Demo4

file1

`<?php
namespace gzg_05;

//制造商
class Maker
{
public function get ()
{
return’華為’;
}
} <?php

namespace gzg_05;

// 商品類
class Product
{
public function get(Maker $maker)
{
return ‘該手機是由: <span style="color:green;font-weight: bolder">‘ . $maker->get() . ‘ </span>生產(chǎn)的’;
}
} <?php
namespace gzg_05;
//use Closure;

use Closure;

class Container
{
// 類實例容器
protected $instance = [];
// 將類實例化的過程綁定到容器中
public function bind($alias, Closure $process)
{
$this->instance[$alias] = $process;
}

  1. // 取出保存在容器中的實例化過程的閉包,并執(zhí)行它
  2. public function make($alias)
  3. {
  4. return $this->instance[$alias]();
  5. }

}
<?php
namespace gzg_05;
use http\Client;

require ‘Product.php’;
require ‘Maker.php’;

// 先不用容器
class Client1
{
public function show()
{

  1. $product = new Product();
  2. $make = new Maker();
  3. return $product->get($make);
  4. }

}

$obj = new Client1();
echo $obj->show();
echo ‘<br>‘;

echo ((new Client1())->show());

<?php

namespace gzg_05;

require ‘Product.php’;
require ‘Maker.php’;
require ‘Container.php’;

class Client2
{
// 輸出商品與制造商
public function show( Product $product,Maker $maker)
{
// 制造商注入到產(chǎn)品類中
return $product->get($maker);
}
}
// 客戶端調(diào)用

// 將類實例綁定到容器中并實例化且返回
$container= new Container();
//$container->bind(‘product’,function (){return new Product();});
//$container->bind(‘Maker’,function (){return new Maker();});
$container->bind(‘product’, function () {return new Product();});
$container->bind(‘maker’, function () {return new Maker();});

// 創(chuàng)建類實例并返回
$product = $container->make(‘product’);
$maker = $container->make(‘maker’);
echo (new Client2())->show($product,$maker);
`

Demo4

<?php spl_autoload_register(function ($className){ $path = str_replace('\\', '/', $className); require dirname(__DIR__) . DIRECTORY_SEPARATOR . $path . '.php'; });
`<?php
//旅游類 傳統(tǒng)方式
namespace base;
//設(shè)置引用的外部類名的別名 把類名全部改為小寫 不改別名的話 調(diào)用時為 Car 類的實際名稱
use base\inc\Car as car;
use base\inc\Train as train;
use base\inc\Plane as plane;
//require DIR . ‘/inc/Car.php’;
//$path = str_replace(‘\‘, ‘/‘, \inc\Car::class);
//echo $path, ‘<br>‘;

require DIR . ‘/autoload.php’;

class Travel10
{
// 交通工具
private $vehicle;
//構(gòu)造方法
public function __construct($vehicle)
{
// print_r($vehicle);
// exit;
//strtolower() 把參數(shù)全部改為小寫
// 根據(jù)參數(shù)進行不同的選擇,調(diào)用不同的類
switch (strtolower($vehicle)){

  1. case 'car':
  2. $this->vehicle = new Car();
  3. break;
  4. case 'train':
  5. $this->vehicle = new train();
  6. break;
  7. case 'plane':
  8. $this->vehicle = new plane();
  9. }
  10. }
  11. // 調(diào)用外部一個依賴對象
  12. public function travelModel()
  13. {
  14. return $this->vehicle->drive() . ' : 去旅行';
  15. }

}

// 客戶端調(diào)用
// $car = new Travel10(‘car’);
// echo $car->travelModel();
// echo ‘<br>‘;

echo (new Travel10(‘car’))->travelModel(), ‘<br>‘;
//echo ‘111’;

//$car = new Car();
//echo $car->drive();
echo (new Travel10(‘train’))->travelModel(), ‘<br>‘;
echo (new Travel10(‘plane’))->travelModel(), ‘<br>‘; <?php
namespace base;

use base\inc\Train as train;
use base\inc\Car as car;
use base\inc\Plane as plane;

require DIR . ‘/autoload.php’;

//$path = str_replace(‘\‘, ‘/‘, \inc\Car::class);
//echo $path, ‘<br>‘;

// 工廠類, 專用于創(chuàng)建類實例

class Factory1

{
protected static $instance =null;
public static function getInstance($vehicle)
{
switch (strtolower($vehicle))
{
case ‘car’:
static::$instance = new car();
break;
case ‘train’:
static::$instance = new train();
break;
case ‘plane’:
static::$instance = new plane();
}
// 返回當(dāng)前具體的交通工具
return static::$instance;
}
}

class Travel5
{
// 交通工具
private $vehicle;
//構(gòu)造方法

  1. public function __construct($vehicle)
  2. {
  3. echo $vehicle;
  4. $this->vehicle = Factory1::getInstance($vehicle);
  5. }
  6. public function travelModel()
  7. {
  8. return $this->vehicle->drive() .'1111111';
  9. }

}

// 客戶端調(diào)用
$car = new Travel5(‘car’);
echo $car->travelModel();
echo ‘<br>‘;

echo (new Travel5(‘train’))->travelModel(),’<br>‘;

echo (new Travel5(‘plane’))->travelModel(),’<br>‘; <?php

namespace base;

use base\inc1\Car ;
use base\inc1\iVehicle;
use base\inc1\Train;
use base\inc1\Plane;
use base\inc1\Ship;
//
require DIR . ‘/autoload.php’;
//$path = str_replace(‘\‘, ‘/‘, Car1::class);
//echo $path, ‘<br>‘;
//$path = str_replace(‘\‘, ‘/‘, \inc1\iVehicle1::class);
//echo $path, ‘<br>‘;
//exit;

class Travel8
{
// 交通工具
private $vehicle;

  1. // 構(gòu)造方法
  2. public function __construct(iVehicle $vehicle)
  3. {
  4. $this->vehicle = $vehicle;
  5. }
  6. // 調(diào)用外部一個依賴對象
  7. public function travelModel()
  8. {
  9. return $this->vehicle->drive() . ' : ======= 去旅行';
  10. }

}
// $car1 = new Car();
//echo (new Travel8($car))->travelModel(), ‘<br>‘;
//// $car1 = new Trave8($car) ;
//
$car = new Car();
echo (new Travel8($car))->travelModel(), ‘<br>‘;

echo (new Travel8(new Plane()))->travelModel(), ‘<br>‘;

echo (new Travel8(new Ship()))->travelModel(), ‘<br>‘;

$ship1 = new Ship();
$ship2 = new Travel8( $ship1);
echo $ship2->travelModel();
echo ‘<br>‘;

$ship = new Ship();
$ship1 = new Travel8( $ship);
echo $ship1->travelModel();
echo ‘<br>‘;

$ship1 = new Travel8( new $ship);
echo $ship1->travelModel();
echo ‘<br>‘;`

手抄

總結(jié)

接口 把面向?qū)ο蟾臑槊嫦蚪涌凇H坑山涌谡{(diào)用
容器 了解了容器的原理,容器就是管理 對象的。

批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語:看來你的markdown語法還沒有掌握 , 作業(yè)排版問題很多, 趕緊補一下
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費學(xué)