博客列表 >12月4日作业--php培训九期线上班

12月4日作业--php培训九期线上班

取个名字真难
取个名字真难原创
2019年12月05日 22:20:25682浏览

statai课堂案例

  1. <?php
  2. namespace static1204;
  3. use PDO;
  4. //声明静态成员用static
  5. //1.创建类
  6. class db2
  7. {
  8. // 2.添加静态成员
  9. protected static $pdo;
  10. protected static $dsn='mysql:host=127.0.0.1;dbname=dedecmsv57';
  11. protected static $username='root';
  12. protected static $password='123456';
  13. //静态方法
  14. public static function connect()
  15. {
  16. // 在类中访问当前类的静态成员用:self::
  17. self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
  18. }
  19. //测试方法
  20. public static function select()
  21. {
  22. // 链接数据库
  23. self::connect();
  24. return self::$pdo->query('select * from `dede_addonarticle`',PDO::FETCH_ASSOC);
  25. }
  26. }
  27. //3.访问类成员
  28. $res=db2::select();
  29. foreach ($res as $row)
  30. {
  31. echo '<pre>'.print_r($row['aid'],true).'</pre>';
  32. }
  33. class sub extends db2
  34. {
  35. protected static $username='root';
  36. protected static $password='123456';
  37. // 重写connect方法
  38. public static function connect()
  39. {
  40. self::$pdo=new PDO(self::$dsn,self::$username,self::$password);
  41. }
  42. }
  43. //3.访问类成员
  44. $result=sub::select();
  45. foreach ($result as $row)
  46. {
  47. echo '<pre>'.print_r($row['body'],true).'</pre>';
  48. }

mvc课堂案例

movel.php

  1. <?php
  2. namespace mvc;
  3. // 模型类:用于数据表的操作
  4. class Model
  5. {
  6. public function getData()
  7. {
  8. // 用二维数组来模拟从表中获取到的商品数据
  9. return [
  10. ['id'=>1, 'name'=>'苹果电脑', 'model'=>'MacBook Pro', 'price'=>25800],
  11. ['id'=>2, 'name'=>'华为手机','model'=>'P30 Pro','price'=>4988],
  12. ['id'=>3, 'name'=>'小爱同学','model'=>'AI音箱','price'=>299],
  13. ];
  14. }
  15. }

View.php

  1. <?php
  2. namespace mvc;
  3. // 视图类:渲染数据
  4. class View
  5. {
  6. public function fetch($data)
  7. {
  8. $table = '<table>';
  9. $table .= '<caption>商品信息表</caption>';
  10. $table .= '<tr><th>ID</th><th>品名</th><th>型号</th><th>价格</th></tr>';
  11. foreach ($data as $product) {
  12. $table .= '<tr>';
  13. $table .= '<td>' . $product['id'] . '</td>';
  14. $table .= '<td>' . $product['name'] . '</td>';
  15. $table .= '<td>' . $product['model'] . '</td>';
  16. $table .= '<td>' . $product['price'] . '</td>';
  17. $table .= '</tr>';
  18. }
  19. $table .= '</table>';
  20. return $table;
  21. }
  22. }
  23. echo '<style>
  24. table {border-collapse: collapse; border: 1px solid; width: 500px;height: 150px}
  25. caption {font-size: 1.2rem; margin-bottom: 10px;}
  26. tr:first-of-type { background-color:lightblue;}
  27. td,th {border: 1px solid}
  28. td:first-of-type {text-align: center}
  29. </style>';

mvc1.php
<?php
// 控制器: 将商品信息表展示出来
namespace mvc;
// 1. 加载模型
require ‘Model.php’;

  1. // 2. 加载视图
  2. require 'View.php';
  3. // 3. 创建控制器
  4. class Controller1
  5. {
  6. public function index()
  7. {
  8. // 拿数据
  9. $model=new Model();
  10. $data=$model->getData();
  11. // 渲染模板
  12. $view= new View();
  13. return $view->fetch($data);
  14. }
  15. }
  16. //访问类成员/
  17. $controller = new Controller1();
  18. echo $controller->index();

mvc2.php

  1. <?php
  2. // 依赖注入
  3. namespace mvc;
  4. // 1. 加载模型
  5. require 'Model.php';
  6. // 2. 加载视图
  7. require 'View.php';
  8. //3.创建控制器
  9. class Controller2
  10. {
  11. public function index($model,$view)
  12. {
  13. // 拿到数据
  14. $data=$model->getData();
  15. //渲染模板
  16. return $view->fetch($data);
  17. }
  18. }
  19. //访问类成员
  20. $model=new Model();
  21. $view=new View();
  22. $controller=new Controller2();
  23. echo $controller->index($model,$view);

mvc3.php

  1. <?php
  2. // 依赖注入: 将注入点改到了控制器的构造方法中
  3. namespace mvc;
  4. //1.加载模型
  5. use BaconQrCode\Common\Mode;
  6. require 'Model.php';
  7. //加载视图
  8. require 'View.php';
  9. //创建控制器
  10. class Controller3
  11. {
  12. protected $model;
  13. protected $view;
  14. // 构造方法, 注入点改到了构造方法中, 实现了模型与视图对象的共享
  15. public function __construct($model,$view)
  16. {
  17. $this->model=$model;
  18. $this->view=$view;
  19. }
  20. public function index()
  21. {
  22. // 拿到数据
  23. $data=$this->model->getData();
  24. // 渲染模板
  25. return $this->view->fetch($data);
  26. }
  27. }
  28. //访问类成员
  29. $model=new Model();
  30. $view=new View();
  31. $controller=new Controller3($model,$view);
  32. echo $controller->index();

mvc4.php

  1. <?php
  2. namespace mvc;
  3. // 1. 加载模型
  4. use BaconQrCode\Common\Mode;
  5. require 'Model.php';
  6. // 2. 加载视图
  7. require 'View.php';
  8. //添加服务容器层
  9. class Container
  10. {
  11. // 容器属性, 就是一个数组,里面全是创建对象的方法
  12. protected $instance=[];
  13. //将类的实例化过程绑定到容器中
  14. //$alias自取名字
  15. //\Closure这个可以不用写
  16. public function bind($alias,\Closure $process)
  17. {
  18. // 将类实例化的方法绑定/ 存储到服务容器中
  19. $this->instance[$alias] = $process;
  20. }
  21. //执行方法
  22. public function make($alias,$par=[])
  23. {
  24. return call_user_func_array($this->instance[$alias],[]);
  25. }
  26. }
  27. // 实例化容器$
  28. $container=new Container();
  29. $container->bind('model',function (){return new Model();});
  30. $container->bind('view',function (){return new View();});
  31. // 3. 创建控制器
  32. class Controller4
  33. {
  34. public function index(Container $container)
  35. {
  36. // 拿到数据
  37. $data = $container->make('model')->getData();
  38. // 渲染模板
  39. return $container->make('view')->fetch($data);
  40. }
  41. }
  42. //访问类成员
  43. $controller = new Controller4();
  44. echo $controller->index($container);

mvc5.php

  1. <?php
  2. // 控制器: 将商品信息表展示出来
  3. // Facade技术: 规范/统一了对外部对象的调用方式, 全部改为了静态调用, 不管之前的方法是什么类型
  4. // laravel, thinkphp
  5. namespace mvc;
  6. // 1. 加载模型
  7. use BaconQrCode\Common\Mode;
  8. require 'Model.php';
  9. // 2. 加载视图
  10. require 'View.php';
  11. /**************************************************/
  12. //添加服务容器层
  13. class Container1
  14. {
  15. // 容器属性, 就是一个数组,里面全是创建对象的方法
  16. protected $instance = [];
  17. // 1. 放进去: 将类的实例化过程绑定到容器中
  18. // $alias: 类实例的别名,
  19. public function bind($alias, \Closure $process)
  20. {
  21. // 将类实例化的方法绑定/ 存储到服务容器中
  22. $this->instance[$alias] = $process;
  23. }
  24. // 2. 取出来: 执行容器中的实例方法
  25. public function make($alias, $params=[])
  26. {
  27. return call_user_func_array($this->instance[$alias], []);
  28. }
  29. }
  30. // 实例化容器
  31. $container = new Container1();
  32. // 用到模型对象, 视图对象,将它们绑定到容器中
  33. $container->bind('model', function () {return new Model();});
  34. $container->bind('view', function () {return new View();});
  35. /**************************************************/
  36. // 添加Facade门面类
  37. class Facade
  38. {
  39. protected static $container = null;
  40. protected static $data = [];
  41. // 用服务容器给它初始化
  42. public static function initialize(Container1 $container)
  43. {
  44. static::$container = $container;
  45. }
  46. // 用静态代理方式将模型中的getData()静态化
  47. public static function getData()
  48. {
  49. static::$data = static::$container->make('model')->getData();
  50. }
  51. // 用静态代理方式将视图中的fetch()静态化
  52. public static function fetch()
  53. {
  54. return static::$container->make('view')->fetch(static::$data);
  55. }
  56. }
  57. // 声明一学生类
  58. class Student extends Facade
  59. {
  60. //
  61. }
  62. /**************************************************/
  63. // 3. 创建控制器
  64. class Controller5
  65. {
  66. public function __construct(Container1 $container)
  67. {
  68. // 调用Faceda里面的初始化方法
  69. Student::initialize($container);
  70. }
  71. public function index()
  72. {
  73. // 3.1 获取数据
  74. Student::getData();
  75. // 3.2 渲染模板
  76. return Student::fetch();
  77. }
  78. }
  79. // 4. 客户端调用/访问类成员
  80. // 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
  81. $controller = new Controller5($container);
  82. echo $controller->index();

总结

课堂上分开讲的话基本上都能听懂,就是代码一多然后有点组合的看起来就有点吃力,有些地方也一时转不过来。然后课下照着代码敲然后再细细着磨着磨好像也能明白,但就是自己写的时候就写不出来。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议