博客列表 >12月04日MVC与框架基础-九期线上班

12月04日MVC与框架基础-九期线上班

WJF
WJF原创
2019年12月05日 16:07:111011浏览

练习案例

将课堂源代码, 全部写一遍, 在编辑器中写就可以, 必须全部运行正确, 并加上自己理解的注释,不用手写

静态成员 DEMO1:

  1. <?php
  2. //命名空间
  3. namespace s;
  4. //引入全局变量PDO 可别名 use PDO as P;
  5. use PDO;
  6. //创建类
  7. class Db1{
  8. //添加静态成员
  9. protected static $pdo;
  10. protected static $dsn = 'mysql:host=127.0.0.1;dbname=phpcn';
  11. protected static $username = 'root';
  12. protected static $password = 'root66';
  13. //静态方法
  14. public static function connect(){
  15. //配置PDO
  16. self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
  17. }
  18. //测试查询数据库
  19. public static function select(){
  20. //链接数据库
  21. self::connect();
  22. //操作数据库
  23. return self::$pdo->query('select * from `user`',PDO::FETCH_ASSOC);
  24. }
  25. }
  26. //访问类成员
  27. $s = Db1::select();
  28. //循环数组
  29. foreach ($s as $v){
  30. echo '<pre>' . print_r($v,true) . '</pre><hr>';
  31. }


静态成员-后期绑定 DEMO2:

  1. <?php
  2. //命名空间
  3. namespace s;
  4. //引入全局变量PDO 可别名 use PDO as P;
  5. use PDO;
  6. //创建类
  7. class Db2{
  8. //添加静态成员
  9. protected static $pdo;
  10. protected static $dsn = 'mysql:host=127.0.0.1;dbname=phpcn';
  11. protected static $username = 'root';
  12. protected static $password = 'root';
  13. //静态方法
  14. public static function connect(){
  15. //配置PDO
  16. //self改为staic用于后期绑定
  17. static::$pdo = new PDO(static::$dsn,static::$username,static::$password);
  18. }
  19. //测试查询数据库
  20. public static function select(){
  21. //链接数据库
  22. static::connect();
  23. //操作数据库
  24. return static::$pdo->query('select * from `user`',PDO::FETCH_ASSOC);
  25. }
  26. }
  27. //继承父类 Db2
  28. class Sub extends Db2{
  29. //重新定义父类
  30. protected static $username = 'root';
  31. protected static $password = 'root66';
  32. public static function connect(){
  33. //配置PDO
  34. self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
  35. }
  36. }
  37. //访问类成员
  38. $s = Sub::select();
  39. //循环数组
  40. foreach ($s as $v){
  41. echo '<pre>' . print_r($v,true) . '</pre><hr>';
  42. }

mvc基础 MVC/Model.PHP:
  1. <?php
  2. namespace mvc;
  3. //M 模型 用于数据表的操作
  4. class Model{
  5. public function getdata(){
  6. //写二维数组 模拟数据表中数据
  7. return [
  8. [ 'id' => 1,'name' => '33703259' , 'pass' => 123456 , 'time' => 1574403195, 'ip' => '127.0.0.1'],
  9. [ 'id' => 2,'name' => 'username' , 'pass' => 794664 , 'time' => 1574403195, 'ip' => '127.0.0.1'],
  10. [ 'id' => 1,'name' => 'newname' , 'pass' => 1238479 , 'time' => 1574403195, 'ip' => '127.0.0.1'],
  11. ];
  12. }
  13. }

  1. <?php
  2. namespace mvc;
  3. // V 识图 渲染数据
  4. class View{
  5. public function fetch($data)
  6. {
  7. //.= 连接
  8. $table = '<table>';
  9. $table .= '<caption>用户信息表</caption>';
  10. $table .= '<tr><th>ID</th><th>用户名</th><th>密码</th><th>注册时间</th><th>IP</th></tr>';
  11. //循环数组
  12. foreach ($data as $v) {
  13. $table .= '<tr>';
  14. $table .= '<td>' . $v['id'] . '</td>';
  15. $table .= '<td>' . $v['name'] . '</td>';
  16. $table .= '<td>' . $v['pass'] . '</td>';
  17. $table .= '<td>' . date('Y-m-s h:i:s',$v['time']) . '</td>';
  18. $table .= '<td>' . $v['ip'] . '</td>';
  19. $table .= '</tr>';
  20. }
  21. //date('Y-m-s h:i:s',time())
  22. $table .= '</table>';
  23. return $table;
  24. }
  25. }
  26. //定义css样式
  27. echo '
  28. <style>
  29. table {border-collapse: collapse; border: 1px solid; width: 500px;height: 150px}
  30. caption {font-size: 1.2rem; margin-bottom: 10px;}
  31. tr:first-of-type { background-color:lightblue;}
  32. td,th {border: 1px solid}
  33. td{text-align: center}
  34. td:first-of-type {text-align: center}
  35. </style>
  36. ';

mvc基础 MVC/demo1.PHP:
  1. <?php
  2. //控制器 输出
  3. namespace mvc;
  4. //加载-模型文件
  5. require 'Model.php';
  6. //加载-识图文件
  7. require 'View.php';
  8. //创建控制器 输出
  9. class con1{
  10. public function index(){
  11. //获取数据
  12. $model = new Model();
  13. $data = $model->getdata();
  14. //渲染数据
  15. $view = new View();
  16. return $view->fetch($data);
  17. }
  18. }
  19. //客户端访问类成员
  20. $c = new con1();
  21. echo $c->index();
mvc基础 MVC/demo2.PHP:
  1. <?php
  2. //控制器 输出
  3. //将类中对其他类的实例化 从模板/视图中分离出来,降低耦合度
  4. //依赖注入
  5. namespace mvc;
  6. //加载-模型文件
  7. require 'Model.php';
  8. //加载-识图文件
  9. require 'View.php';
  10. //创建控制器 输出
  11. class con2{
  12. public function index(Model $model,View $view){
  13. //获取数据
  14. $data = $model->getdata();
  15. //渲染数据
  16. return $view->fetch($data);
  17. }
  18. }
  19. //客户端访问类成员
  20. //实例化代码放到客户端
  21. $model = new Model();
  22. $view = new View();
  23. $c = new con2();
  24. echo $c->index($model,$view);

mvc基础 MVC/demo3.PHP:
  1. <?php
  2. //控制器 输出
  3. //依赖注入 把注入点改到控制器的构造方法中
  4. namespace mvc;
  5. //加载-模型文件
  6. require 'Model.php';
  7. //加载-识图文件
  8. require 'View.php';
  9. //创建控制器 输出
  10. class con3{
  11. protected $model;
  12. protected $view;
  13. //构造方法
  14. public function __construct(Model $model,View $view)
  15. {
  16. $this->model = $model;
  17. $this->view = $view;
  18. }
  19. public function index(){
  20. //获取数据
  21. $data = $this->model->getdata();
  22. //渲染数据
  23. return $this->view->fetch($data);
  24. }
  25. }
  26. //客户端访问类成员
  27. //实例化代码放到客户端
  28. $model = new Model();
  29. $view = new View();
  30. $c = new con3($model,$view);
  31. echo $c->index();

mvc基础 MVC/demo4.PHP:
  1. <?php
  2. //控制器 输出
  3. //依赖注入 把注入点改到控制器的构造方法中2
  4. namespace mvc;
  5. //加载-模型文件
  6. require 'Model.php';
  7. //加载-识图文件
  8. require 'View.php';
  9. //添加服务容器
  10. class Con{
  11. protected $inst = [];
  12. //构造方法
  13. //绑定
  14. public function bind($alias,\Closure $process){
  15. $this->inst[$alias] = $process;
  16. }
  17. //取出
  18. public function make($alias,$params=[]){
  19. return call_user_func_array($this->inst[$alias],[]);
  20. }
  21. }
  22. //实例化服务容器
  23. $con = new Con();
  24. //把模型 视图 对象绑定当容器上
  25. $con->bind('model',
  26. function (){
  27. return new Model();
  28. }
  29. );
  30. $con->bind('view',
  31. function (){
  32. return new View();
  33. }
  34. );
  35. //创建控制器 输出
  36. class con4{
  37. public function index(Con $con){
  38. //获取数据
  39. $data = $con->make('model')->getdata();
  40. //渲染数据
  41. return $con->make('view')->fetch($data);
  42. }
  43. }
  44. //客户端访问类成员
  45. //实例化代码放到客户端
  46. $c = new con4();
  47. echo $c->index($con);

手写案例

将最后一个demo5.php中的代码, 手写提交
  1. <?php
  2. //控制器 输出
  3. //Facade技术:统一对外部对象的调用方式改为静态调用
  4. namespace mvc;
  5. //加载-模型文件
  6. require 'Model.php';
  7. //加载-识图文件
  8. require 'View.php';
  9. //添加服务容器
  10. class Container1
  11. {
  12. protected $instance = [];
  13. //构造方法
  14. //绑定
  15. public function bind($alias, \Closure $process)
  16. {
  17. $this->instance[$alias] = $process;
  18. }
  19. //取出
  20. public function make($alias, $params=[])
  21. {
  22. return call_user_func_array($this->instance[$alias], []);
  23. }
  24. }
  25. //实例化服务容器
  26. $container = new Container1();
  27. //把模型 视图 对象绑定当容器上
  28. $container->bind('model',
  29. function (){
  30. return new Model();
  31. }
  32. );
  33. $container->bind('view',
  34. function (){
  35. return new View();
  36. }
  37. );
  38. /***********************/
  39. //添加Facade门面类
  40. class Facade{
  41. protected static $container = null;
  42. protected static $data = [];
  43. public static function initialize(Container1 $container){
  44. static::$container = $container;
  45. }
  46. public static function getData(){
  47. static::$data = static::$container->make('model')->getData();
  48. }
  49. public static function fetch(){
  50. return static::$container->make('view')->fetch(static::$data);
  51. }
  52. }
  53. class Student extends Facade
  54. {
  55. //
  56. }
  57. //创建控制器 输出
  58. class Controller5{
  59. public function __construct(Container1 $container)
  60. {
  61. Student::initialize($container);
  62. }
  63. public function index(){
  64. //获取数据
  65. Student::getData();
  66. //渲染数据
  67. return Student::fetch();
  68. }
  69. }
  70. //客户端访问类成员
  71. //实例化代码放到客户端
  72. $controller = new Controller5($container);
  73. echo $controller->index();






总结


  • 静态成员:

    • 添加静态成员static
      protected static $name = 'WJF';
    • 添加静态方法
      public static function connect(){}
    • 访问
      类名::方法名
    • 静态成员 延时绑定
      使用static::成员名/方法名绑定 根据最终调用的类决定绑定
  • MVC模式:

    • M模型:对数据表进行读取操作
    • V视图:对取到数据进行渲染
    • C控制器:控制器从视图中读取数据

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