Blogger Information
Blog 26
fans 1
comment 0
visits 22363
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 第课 将课堂代码全部上机操作至少一遍以上 12月5日作业
孤忆寻昔R
Original
1207 people have browsed it

作业一

Demo1.php单利模式
` <?php

  1. //单例模式
  2. namespace _1205;
  3. class Temp
  4. {
  5. //
  6. }
  7. $obj1 = new Temp();
  8. $obj2 = new Temp();
  9. var_dump($obj1,$obj2);
  10. //单例模式原理
  11. class Demo1
  12. {
  13. //构造方发私有化
  14. private function __construct()
  15. {
  16. }
  17. // 目前 只能在类中的背部将类实例化
  18. // 当前类的实例
  19. public static $instace = null;
  20. //实例化当前类的方法
  21. public static function getInstance()
  22. {
  23. //实例化当前类,并返回类实例/对象
  24. // 判断当前类是否已经被实例化过了,如果没有的化就实例化,如果以实例化,就返回它
  25. if(is_null(self::$instace)){
  26. self::$instace = new self;
  27. }
  28. return self::$instace;
  29. }
  30. // 禁用克隆魔术方法
  31. private function __clone()
  32. {
  33. }
  34. }
  35. //new Demo1();
  36. $obj1 = Demo1::getInstance();
  37. $obj2 = Demo1::getInstance();
  38. var_dump($obj1 === $obj2);
  39. echo '<hr>';
  40. var_dump($obj1,$obj2);//解决重复实例化
  41. //单利模型应用场景
  42. class Db
  43. {
  44. //构造方发私有化
  45. private function __construct(...$connectParams)
  46. {
  47. $dsn = $connectParams[0];
  48. $username = $connectParams[1];
  49. $password = $connectParams[2];
  50. self::$pdo = new \PDO($dsn,$username,$password);
  51. }
  52. // 目前 只能在类中的背部将类实例化
  53. // 当前类的实例
  54. public static $pdo = null;
  55. //实例化当前类的方法
  56. public static function getInstance(...$connectParams)
  57. {
  58. //实例化当前类,并返回类实例/对象
  59. // 判断当前类是否已经被实例化过了,如果没有的化就实例化,如果以实例化,就返回它
  60. if(is_null(self::$pdo)){
  61. // 构造函数不需要返回
  62. new self(...$connectParams);
  63. }
  64. return self::$pdo;
  65. }
  66. // 禁用克隆魔术方法
  67. private function __clone()
  68. {
  69. }
  70. }
  71. echo '<hr>';
  72. //连接数据库
  73. $connectParams = ['mysql:host=127.0.0.1;dbname=pdo','root','root'];
  74. $pdo = Db::getInstance(...$connectParams); //使用php7 新特性
  75. //使用查询数据库select
  76. print_r($pdo ->query('SELECT * FROM `users`')->fetchAll());`

Demo2.php 工厂模式
<?php

  1. namespace _1205;
  2. //工厂模式: 用于批量创建类的实例/ 对象
  3. use _1204\Db2;
  4. class Demo2
  5. {
  6. //....
  7. }
  8. //file1.php
  9. $obj = new Demo2();
  10. //file3.php
  11. $obj = new Demo2();
  12. //file3.php
  13. $obj = new Demo2();
  14. //+++++++++++++++++++++++++++++++++++++++++++
  15. //创建类
  16. class Test1
  17. {
  18. // 创建构造方法
  19. public function __construct($agr1)
  20. {
  21. echo '对象创建成功,参数是: ' . $agr1;
  22. }
  23. }
  24. //创建类
  25. class Test2
  26. {
  27. // 创建方法
  28. public function __construct($agr1,$arg2)
  29. {
  30. echo '对象创建成功,参数是: ' . implode(',',[$agr1,$arg2]);
  31. }
  32. }
  33. class Test3
  34. {
  35. public function __construct($agr1,$arg2,$agr3)
  36. {
  37. echo '对象创建成功,参数是: ' . implode(',',[$agr1,$arg2,$agr3]);
  38. }
  39. }
  40. //工厂类,专门创建类实例
  41. class Factory
  42. {
  43. public static function cerate($className,...$argments)
  44. {
  45. return new $className(...$argments);
  46. }
  47. }
  48. echo Test::class;//_1205\Test: 完整的类名,代用命名空间的
  49. //用工厂类来创建类实例
  50. Factory::cerate(Test1::class,100);
  51. echo '<br>';
  52. Factory::cerate(Test2::class,.100,200);
  53. echo '<br>';
  54. Factory::cerate(Test3::class,.100,200,300);

Demo3.php依赖注入
<?php
//依赖注入: 解决对象调用之间耦合

  1. //工作类
  2. class Person
  3. {
  4. // 要依赖的外部对象
  5. private $car = null;
  6. //在构造方法中将依赖的外部对象全部实例化
  7. // 注入点放到构造方法中
  8. public function __construct()
  9. {
  10. $this->car = new Car();
  11. }
  12. //对外部对象执行一个动作
  13. public function work()
  14. {
  15. return $this->car->drive();
  16. }
  17. }
  18. //依赖的外部类
  19. class Car
  20. {
  21. public function drive()
  22. {
  23. return '开车去上班';
  24. }
  25. }
  26. //实例化类
  27. $person = new Person();
  28. echo $person->work();
  29. echo '<hr>';
  30. /*********************************************/
  31. class Person1
  32. {
  33. // 要依赖的外部对象
  34. private $car = null;
  35. //在构造方法中将依赖的外部对象全部实例化
  36. // 注入点放到构造方法中
  37. public function __construct(Car $car)
  38. {
  39. $this->car = $car;
  40. }
  41. //对外部对象执行一个动作
  42. public function work()
  43. {
  44. return $this->car->drive();
  45. }
  46. }
  47. //依赖的外部类
  48. class Car1
  49. {
  50. public function drive()
  51. {
  52. return '开车去上班';
  53. }
  54. }
  55. //实例化类
  56. $car = new Car();
  57. $person = new Person1($car);
  58. echo $person->work();
  59. echo '<hr>';

base\Travel1.php
<?php
//旅行类: 使用最传统的方式

  1. namespace base;
  2. //设置引用的外部类名的别名
  3. use base\inc1\Car;
  4. use base\inc1\Train;
  5. use base\inc1\Plane;
  6. //导入绝对的路径自动加载
  7. require __DIR__.'/autoload.php';
  8. //创建类
  9. class Travel1
  10. {
  11. //交通工具
  12. private $vehicle;
  13. //构造方法
  14. public function __construct($vehicle)
  15. {
  16. // 用switch判断下条件 用构造方法进行初始化
  17. switch(strtolower($vehicle)){
  18. case 'car':
  19. $this->vehicle = new Car(); //初始化成员后 = 实例化Car()方法
  20. break;
  21. case 'train':
  22. $this->vehicle = new Train();
  23. break;
  24. case 'plane':
  25. $this->vehicle = new Plane();
  26. }
  27. }
  28. // 创建去哪里玩耍模型控制器
  29. public function travelModel()
  30. {
  31. // 返回本类中 构造初始化 -》 inc1中的三个方法
  32. return $this->vehicle->drive(). ': 去旅行';
  33. }
  34. }
  35. //客户端调用 实例化car方法 -》抵用 travaelMidel 模板信息
  36. echo (new Travel1('car'))->travelModel(), '</br>';
  37. echo (new Travel1('train'))->travelModel(),'</br>';
  38. echo (new Travel1('plane'))->travelModel().'<br>';

base\Travel2.php
<?php
//旅行类: 使用最传统的方式

  1. namespace base;
  2. //设置引用的外部类名的别名
  3. use base\inc1\Car;
  4. use base\inc1\Train;
  5. use base\inc1\Plane;
  6. //导入绝对的路径自动加载
  7. require __DIR__.'/autoload.php';
  8. //工厂类 : 专用于创建类实例
  9. class Factory
  10. {
  11. // 将工厂类成员静态化
  12. protected static $instance = null;
  13. public static function getInstance($vehicle)
  14. {
  15. switch(strtolower($vehicle)){
  16. case 'car':
  17. self::$instance = new Car();
  18. break;
  19. case 'train':
  20. static::$instance = new Train();
  21. break;
  22. case 'plane':
  23. static::$instance = new Plane();
  24. }
  25. //返回当前具体的交通工具
  26. return static::$instance;
  27. }
  28. }
  29. //1、创建类
  30. class Travel2
  31. {
  32. //交通工具
  33. private $vehicle;
  34. //构造方法
  35. public function __construct($vehicle)
  36. {
  37. // 用构造方法进行初始化
  38. $this->vehicle = Factory::getInstance($vehicle);
  39. }
  40. // 创建去哪里玩耍模型控制器
  41. public function travelModel()
  42. {
  43. // 返回 本类调用初始化 -》调用是三个值
  44. return $this->vehicle->drive(). ': @@@@去旅行';
  45. }
  46. }
  47. //客户端调用 实例化car方法 -》抵用 travaelMidel 模板信息
  48. echo (new Travel2('car'))->travelModel(), '</br>';
  49. echo (new Travel2('train'))->travelModel(),'</br>';
  50. echo (new Travel2('plane'))->travelModel().'<br>';

base\Travel3.php
<?php
//旅行类: 使用最传统的方式

  1. namespace base;
  2. //设置引用的外部类名的别名
  3. use base\inc2\Car;
  4. use base\inc2\Train;
  5. use base\inc2\Plane;
  6. use base\inc2\Ship;
  7. use base\inc2\iVehicle; // 使用类
  8. //调用绝对路径自动加载
  9. require __DIR__.'/autoload.php';
  10. //创建类
  11. class Travel3
  12. {
  13. //交通工具
  14. private $vehicle;
  15. //构造方法 : 使用了接口给对象类 变得更加的灵活
  16. public function __construct(iVehicle $vehicle)
  17. {
  18. // 初始化交通工具
  19. $this->vehicle = $vehicle;
  20. }
  21. // 创建类方法 去哪里玩耍
  22. public function travelModel()
  23. {
  24. // 返回 调用本类的构造方法 然后调用接口中的统一方法 function drive()
  25. return $this->vehicle->drive(). ': ++++++++++++++去旅行';
  26. }
  27. }
  28. //客户端调用 接口实现了统一方法,让代码更加简洁
  29. echo (new Travel3(new Car()))->travelModel(), '</br>';
  30. echo (new Travel3(new Train()))->travelModel(),'</br>';
  31. echo (new Travel3(new Plane()))->travelModel().'<br>';
  32. echo (new Travel3(new Ship()))->travelModel().'<br>';

1205/lesson1/Container.php
<?php

  1. //容器类
  2. namespace _1205;
  3. use Closure;
  4. //创建容器类
  5. class Container
  6. {
  7. //类实例容器
  8. protected $instance = [];
  9. //将类实例化的过程绑定到容器中
  10. public function bind($alias,Closure $process)
  11. {
  12. $this->instance[$alias] = $process;
  13. }
  14. // 去除保存在容器中的实例化过程的闭包,并执行它
  15. public function make($alias)
  16. {
  17. // 返回 本类实例容器中
  18. return $this->instance[$alias]();
  19. }
  20. }

1205/lessonl/demo1.php
<?php

  1. namespace _1205;
  2. require 'Product.php';
  3. require 'Maker.php';
  4. //先不用容器
  5. class Client1
  6. {
  7. //输出商品与制造商
  8. public function show()
  9. {
  10. //创建产品的实例
  11. $product = new Product();
  12. //创建制造商的实例
  13. $maker = new Maker();
  14. //制造商注入到产品类中
  15. return $product->get($maker);
  16. }
  17. }
  18. //客户端调用
  19. echo (new Client1())->show();




作业二

总结

1、单利模式只能实例化一个类,相同的方法可以用接口, 工厂模式可以实例化多个对象

2、创建容器后必须创建类成员(类实例容器) protected $inser = []; 还要使用use 类

3、spl_autoload_register() 方法将路拼接封装,实现自动加载文件

4、如果每天努力的完成任务也就不会那么多的作业,不应该相信有周六、周天,大把的时间,这两天是用来复习学习过的知识!
5、用自己的方法去写注释,发现很多都很写出来,自己不能写出来,可能是写的太少了,也知道了自己的不足!

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:错别字有不少, 单例不是单列, 下次注意
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post