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

搜索
博主信息
博文 32
粉絲 1
評論 0
訪問量 36403
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
1205作業(yè)設計模式與服務容器-PHP培訓第九期線上班
淡月
原創(chuàng)
1452人瀏覽過

單例模式

  1. <?php
  2. namespace _1205;
  3. //use PDO;
  4. // 單例模式
  5. class Temp
  6. {
  7. // ...
  8. }
  9. $obj1 = new Temp();
  10. $obj2 = new Temp();
  11. var_dump($obj1, $obj2);
  12. echo '<br>';
  13. var_dump($obj1 === $obj2);
  14. echo '<hr>';
  15. // 單例模式原理
  16. class Demo1
  17. {
  18. // 構(gòu)造方法私有化
  19. private function __construct()
  20. {
  21. }
  22. // 目前 只能在類中的內(nèi)部將類實例化
  23. // 當前類的實例
  24. public static $instance = null;
  25. // 實例化當前類的方法
  26. public static function getInstance()
  27. {
  28. // 實例化當前類,并返回類實例/對象
  29. // 判斷當前類是否已經(jīng)被實例化過了,如果沒有的話就實例化,如果已實例化,就返回它
  30. if (is_null(self::$instance)) {
  31. self::$instance = new self();
  32. }
  33. return self::$instance;
  34. }
  35. // 禁用克隆魔術(shù)方法
  36. private function __clone()
  37. {
  38. // ...
  39. }
  40. }
  41. //new Demo1();
  42. $obj1 = Demo1::getInstance();
  43. $obj2 = Demo1::getInstance();
  44. var_dump($obj1 === $obj2);
  45. echo '<br>';
  46. var_dump($obj1, $obj2);
  47. echo '<hr>';
  48. // 單例模型應用場景數(shù)據(jù)庫鏈接
  49. class Db
  50. {
  51. // 構(gòu)造方法私有化
  52. private function __construct(...$connectParams)
  53. {
  54. $dsn = $connectParams[0];
  55. $username = $connectParams[1];
  56. $password = $connectParams[2];
  57. self::$pdo = new \PDO($dsn, $username, $password);
  58. }
  59. // 目前 只能在類中的內(nèi)部將類實例化
  60. // 當前類的實例
  61. public static $pdo = null;
  62. // 實例化當前類的方法
  63. public static function getInstance(...$connectParams)
  64. {
  65. // 實例化當前類,并返回類實例/對象
  66. // 判斷當前類是否已經(jīng)被實例化過了,如果沒有的話就實例化,如果已實例化,就返回它
  67. if (is_null(self::$pdo)) {
  68. // 構(gòu)造函數(shù)不需要返回
  69. new self(...$connectParams);
  70. }
  71. return self::$pdo;
  72. }
  73. // 禁用克隆魔術(shù)方法
  74. private function __clone()
  75. {
  76. // ...
  77. }
  78. }
  79. echo '<hr>';
  80. $connectParams = ['mysql:host=localhost;dbname=mysql', 'root', 'root'];
  81. $pdo = Db::getInstance(...$connectParams);
  82. print_r($pdo->query('SELECT * FROM `db`')->fetchAll());

工廠模式

  1. <?php
  2. //工床模式
  3. class Test1
  4. {
  5. public function __construct($arg1)
  6. {
  7. echo '對象創(chuàng)建成功, 參數(shù)是: ' . $arg1;
  8. }
  9. }
  10. class Test2
  11. {
  12. public function __construct($arg1, $arg2)
  13. {
  14. echo '對象創(chuàng)建成功, 參數(shù)是: ' . implode(', ', [$arg1, $arg2]);
  15. }
  16. }
  17. class Test3
  18. {
  19. public function __construct($arg1, $arg2, $arg3)
  20. {
  21. echo '對象創(chuàng)建成功, 參數(shù)是: ' . implode(', ', [$arg1, $arg2, $arg3]);
  22. }
  23. }
  24. // 工廠類, 專用于創(chuàng)建類實例
  25. class Factory
  26. {
  27. public static function create($className, ...$argments)
  28. {
  29. return new $className(...$argments);
  30. }
  31. }
  32. // 用工廠類來創(chuàng)建類實例/對象
  33. Factory::create(Test1::class, 500);
  34. echo '<br>';
  35. Factory::create(Test2::class,'第一個參數(shù)','第二個參數(shù)');
  36. echo '<br>';
  37. Factory::create(Test3::class, '第一個參數(shù)','第二個參數(shù)','第三個參數(shù)');

依賴注入

  1. <?php
  2. //依賴注入
  3. namespace dem;
  4. //創(chuàng)建類
  5. class Person
  6. {
  7. // 要依賴的外部對象
  8. private $car;
  9. //在構(gòu)造方法中將依賴的外部對象 全部實例化
  10. public function __construct()
  11. {
  12. $this->car=new Car();
  13. }
  14. //外部對象的方法
  15. public function work()
  16. {
  17. return $this->car->drive();
  18. }
  19. }
  20. //依賴外部的類
  21. class Car
  22. {
  23. // 外部類的方法
  24. public function drive()
  25. {
  26. return '開車去上工作';
  27. }
  28. }
  29. //實例化類
  30. $Person=new Person();
  31. echo $Person->work();
  32. echo '<hr>';
  33. class Person1
  34. {
  35. // 要依賴的外部對象
  36. private $car ;
  37. // 在構(gòu)造方法中將依賴的外部對象全部實例化
  38. // 注入點放到構(gòu)造方法中
  39. public function __construct(Car $car)
  40. {
  41. $this->car = $car;
  42. }
  43. // 外部對象執(zhí)行一個動作
  44. public function work()
  45. {
  46. return $this->car->drive();
  47. }
  48. }
  49. // 依賴的外部類
  50. class Car1
  51. {
  52. public function drive()
  53. {
  54. return '開車去上班';
  55. }
  56. }
  57. // 實例化類
  58. $car = new Car();
  59. $person = new Person1($car);
  60. echo $person->work();
  61. echo '<hr>';

namespace base\inc1\car

  1. <?php
  2. namespace base\inc1;
  3. class Car
  4. {
  5. public function drive()
  6. {
  7. return '開汽車';
  8. }
  9. }

namespace base\inc1\plane

namespace base\inc1\train

namespace base\travel1.php

  1. <?php
  2. //***類
  3. namespace base;
  4. //引用類
  5. use base\inc1\Car;
  6. use base\inc1\Train;
  7. use base\inc1\Plane;
  8. require __DIR__ .'/autoload.php';
  9. class Travel1
  10. {
  11. // 交通工具
  12. private $vehicle;
  13. // 構(gòu)造方法
  14. public function __construct($vehicle)
  15. {
  16. switch (strtolower($vehicle)){
  17. case 'car';
  18. $this->vehicle=new Car();
  19. break;
  20. case 'train';
  21. $this->vehicle=new Train();
  22. break;
  23. case 'plane';
  24. $this->vehicle=new Plane();
  25. break;
  26. }
  27. }
  28. //調(diào)用外部一個對象
  29. public function travelModel()
  30. {
  31. return $this->vehicle->drive().'去玩耍';
  32. }
  33. }
  34. //客戶端調(diào)用
  35. echo (new Travel1('car'))->travelModel() . '<br>';
  36. echo (new Travel1('train'))->travelModel() . '<br>';
  37. echo (new Travel1('plane'))->travelModel() . '<br>';

接口

  1. <?php
  2. namespace base\inc1;
  3. // 交通工具的接口
  4. interface iVehicle
  5. {
  6. public function drive();
  7. }

ravel3.php

  1. <?php
  2. // ***類: 使用最傳統(tǒng)的方式
  3. namespace base;
  4. // 設置引用的外部類名的別名
  5. use base\inc1\Car;
  6. use base\inc1\Train;
  7. use base\inc1\Plane;
  8. use base\inc1\Ship;
  9. use base\inc1\iVehicle;
  10. require __DIR__ . '/autoload.php';
  11. class Travel3
  12. {
  13. // 交通工具
  14. private $vehicle;
  15. // 構(gòu)造方法
  16. public function __construct(iVehicle $vehicle)
  17. {
  18. $this->vehicle = $vehicle;
  19. }
  20. // 調(diào)用外部一個依賴對象
  21. public function travelModel()
  22. {
  23. return $this->vehicle->drive() . ' : ======= 去***';
  24. }
  25. }
  26. // 客戶端調(diào)用
  27. $car = new Car();
  28. echo (new Travel3($car))->travelModel(), '<br>';
  29. echo (new Travel3(new Train()))->travelModel(), '<br>';
  30. echo (new Travel3(new Plane()))->travelModel(), '<br>';
  31. echo (new Travel3(new Ship()))->travelModel(), '<br>';

Container

  1. <?php
  2. //容器類
  3. namespace _1205;
  4. //引用閉包
  5. use Closure;
  6. class Container
  7. {
  8. // 類實例
  9. protected $instance=[];
  10. //將實例化過程綁定到容中
  11. public function bind($alias, Closure $process)
  12. {
  13. $this->instance[$alias]=$process;
  14. }
  15. //取出保存在容器中的實例化過程
  16. public function maker($alias)
  17. {
  18. return $this->instance[$alias];
  19. }
  20. }

Maker

  1. <?php
  2. namespace _1205;
  3. class Maker
  4. {
  5. public function get()
  6. {
  7. return '華為';
  8. }
  9. }

Product

  1. <?php
  2. namespace _1205;
  3. class Product {
  4. public function get(Maker $maker)
  5. {
  6. return '該手機是由:'.$maker->get().'生產(chǎn)的';
  7. }
  8. }

deomo1

  1. <?php
  2. require 'Product.php';
  3. require 'Maker.php';
  4. class Client1
  5. {
  6. // 直接輸出
  7. public function show(){
  8. $product=new \_1205\Product();
  9. $make=new \_1205\Maker();
  10. return $product->get($make);
  11. }
  12. }
  13. // 調(diào)用
  14. echo (new Client1())->show();
  15. $sh=new Client1();
  16. echo $sh->show();

demo2

  1. <?php
  2. namespace _1205;
  3. require 'Product.php';
  4. require 'Maker.php';
  5. require 'Container.php';
  6. // 不用容器
  7. class Client2
  8. {
  9. // 直接輸出商品與制造商
  10. public function show(Product $product, Maker $maker)
  11. {
  12. // 制造商注入到產(chǎn)品類中
  13. return $product->get($maker);
  14. }
  15. }
  16. // 綁定到容器中并實例化且返回
  17. $container = new Container();
  18. // 將實例化代碼綁定到容器中
  19. $container->bind('product', function () {return new Product();});
  20. $container->bind('maker', function () {return new Maker();});
  21. // 創(chuàng)建類實例并返回
  22. $product = $container->maker('product');
  23. $maker = $container->maker('maker');
  24. echo (new Client2())->show($product, $maker);

手抄作業(yè)

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

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

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

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

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