博主信息
博文 145
粉丝 7
评论 7
访问量 202265
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
02月18日作业:设计模式(单例模式和工厂模式)
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
原创
901人浏览过

作业一:单例模式

1、代码:

  1. <?php
  2. namespace mode;
  3. class Single
  4. {
  5. private static $mysql=null;
  6. private function __construct(...$linkParams)
  7. {
  8. list($dsn,$username,$password)=$linkParams;
  9. self::$mysql=new \PDO($dsn,$username,$password);
  10. }
  11. private function __clone()
  12. {
  13. // …………
  14. }
  15. public static function getnew(...$linkParams)
  16. {
  17. if (is_null(self::$mysql)) {
  18. new self(...$linkParams);
  19. }
  20. return self::$mysql;
  21. }
  22. }
  23. $link=['mysql:host=NewYear.com;dbname=php','phptest','123456'];
  24. $mysql=Single::getnew(...$link);
  25. $my=Single::getnew(...$link);
  26. var_dump($mysql===$my);
  27. echo '<pre>'.print_r($mysql->query('select * from `staffs`')->fetchAll(\PDO::FETCH_ASSOC),true).'</pre>';

运行结果图:

作业二:工厂模式(抽象类)工厂类是把多个类的实例化集中到一个类中,本质没有变;

1、目录结构:

2、Minus.php代码:

  1. <?php
  2. namespace base\method;
  3. class Minus
  4. {
  5. public $num1;
  6. public $num2;
  7. public function __construct($num1,$num2)
  8. {
  9. $this->num1=$num1;
  10. $this->num2=$num2;
  11. }
  12. public function get_result()
  13. {
  14. $c = $this->num1 - $this->num2;
  15. return '相减结果是:'.$c;
  16. }
  17. }

3、Plus.php代码:

  1. <?php
  2. namespace base\method1;
  3. class Plus implements Post
  4. {
  5. public $num1;
  6. public $num2;
  7. public function __construct($num1,$num2)
  8. {
  9. $this->num1=$num1;
  10. $this->num2=$num2;
  11. }
  12. public function get_result()
  13. {
  14. $c = $this->num1 + $this->num2;
  15. return '相加结果是:'.$c;
  16. }
  17. }
  18. // $plus=new Plus(1,2);
  19. // echo $plus->get_result();

4、Ride.php代码:

  1. <?php
  2. namespace base\method1;
  3. class Ride implements Post
  4. {
  5. public $num1;
  6. public $num2;
  7. public function __construct($num1,$num2)
  8. {
  9. $this->num1=$num1;
  10. $this->num2=$num2;
  11. }
  12. public function get_result()
  13. {
  14. $c = $this->num1 * $this->num2;
  15. return '相乘结果是:'.$c;
  16. }
  17. }

5、Post.php代码:

  1. <?php
  2. namespace base\method1;
  3. interface Post
  4. {
  5. public function get_result();
  6. }

6、demo3.php代码:

  1. <?php
  2. namespace part1;
  3. use base\method1\Minus;
  4. use base\method1\Plus;
  5. use base\method1\Ride;
  6. use base\method1\Post;
  7. require __DIR__.DIRECTORY_SEPARATOR.'autoload.php';
  8. class Count1
  9. {
  10. public function yunsuan(Post $class)
  11. {
  12. return $class->get_result();
  13. }
  14. }
  15. echo (new Count1())->yunsuan(new Plus(1,2)) . '<br>';
  16. echo (new Count1())->yunsuan(new Minus(4,5)) . '<br>';
  17. echo (new Count1())->yunsuan(new Ride(3,9)) . '<br>';

6、运行结果图:

作业三:知识点总结:

1、clone:复制关键字(对象);$new=new Mysql();$s=clone $new;
2、__clone();复制对象实列,无法直接备调用;
3、通过私有化(private)__construct()__clone()来禁止类实列化和复制;
4、spl_autoload_register():自动加载器(闭包);
5、__DIR__dirname()区别:__DIR__和dirname(__FILE__)功能一致;
6、require 'demo.php';加载关键字:require
7、接口类关键字interface:interface Post{}
8、继承接口类关键字implements:class Mode implements Post{};
9、类继承关键字:extends
10、抽象类和方法关键字:abstract 继承抽象类的关键字:extends

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:从关键字入手, 学习是一个捷径
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学