Blogger Information
Blog 33
fans 0
comment 0
visits 19959
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
12月4日作业--php培训九期线上班
取个名字真难
Original
693 people have browsed it

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();

总结

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

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