亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 32
粉絲 1
評(píng)論 0
訪問量 36371
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
1204作業(yè)MVC與框架基礎(chǔ)PHP培訓(xùn)第九期線上班
淡月
原創(chuàng)
5329人瀏覽過

1.類靜態(tài)成員

  1. <?php
  2. namespace _1204;
  3. use PDO;
  4. // static: 聲明類中的靜態(tài)成員
  5. // 1. 創(chuàng)建類
  6. class Db1
  7. {
  8. // 2. 添加類成員
  9. // 添加的靜態(tài)成員: 屬性, 方法
  10. // 靜態(tài)屬性
  11. protected static $pdo;
  12. protected static $dsn = 'mysql:host=127.0.0.1;dbname=mydb';
  13. protected static $username = 'peter';
  14. protected static $password = '123456';
  15. // 靜態(tài)方法
  16. public static function connect()
  17. {
  18. // 在類中訪問當(dāng)前類的靜態(tài)成員: self::
  19. self::$pdo = new PDO(self::$dsn, self::$username, self::$password);
  20. }
  21. // 測(cè)試方法
  22. public static function select()
  23. {
  24. // 連接數(shù)據(jù)庫(kù)
  25. self::connect();
  26. return self::$pdo->query('select * from `users`', PDO::FETCH_ASSOC);
  27. }
  28. }
  29. // 3. 訪問類成員
  30. // 在類的外部,訪問類中的靜態(tài)成員, 直接用類名
  31. $result = Db1::select();
  32. foreach ($result as $row) {
  33. echo '<pre>' . print_r($row, true) . '</pre>';
  34. }

2.后期靜態(tài)綁定

  1. <?php
  2. namespace _1204;
  3. // static: 后期靜態(tài)綁定
  4. // 使用場(chǎng)景 : 靜態(tài)繼承的上下文環(huán)境中
  5. // 類成員訪問綁定時(shí)間: 在聲明的時(shí)候綁定, 在調(diào)用的時(shí)候綁定
  6. // 后期綁定就是在類成員被調(diào)用的時(shí)候再動(dòng)態(tài)的綁定, 也叫:延遲綁定
  7. use PDO;
  8. // static: 聲明類中的靜態(tài)成員
  9. // 1. 創(chuàng)建類
  10. class Db2
  11. {
  12. // 2. 添加類成員
  13. // 添加的靜態(tài)成員: 屬性, 方法
  14. // 靜態(tài)屬性
  15. protected static $pdo;
  16. protected static $dsn = 'mysql:host=127.0.0.1;dbname=mydb';
  17. protected static $username = 'peter';
  18. protected static $password = '123456';
  19. // 靜態(tài)方法
  20. public static function connect()
  21. {
  22. // 在類中訪問當(dāng)前類的靜態(tài)成員: self::
  23. static::$pdo = new PDO(static::$dsn, static::$username, static::$password);
  24. }
  25. // 測(cè)試方法
  26. public static function select()
  27. {
  28. // 連接數(shù)據(jù)庫(kù)
  29. static::connect();
  30. return self::$pdo->query('select * from `users`', PDO::FETCH_ASSOC);
  31. }
  32. }
  33. class Sub extends Db2
  34. {
  35. protected static $username = 'peter';
  36. protected static $password = '123456';
  37. public static function connect()
  38. {
  39. self::$pdo = new PDO(self::$dsn, self::$username, self::$password);
  40. }
  41. }
  42. // 3. 訪問類成員
  43. // 在類的外部,訪問類中的靜態(tài)成員, 直接用類名
  44. $result = Sub::select();
  45. //本意是想用子類中的connect();
  46. foreach ($result as $row) {
  47. echo '<pre>' . print_r($row, true) . '</pre>';
  48. }

3.MODEL 模型類

  1. <?php
  2. namespace mvc;
  3. // 模型類:用于數(shù)據(jù)表的操作
  4. class Model
  5. {
  6. public function getData()
  7. {
  8. // 用二維數(shù)組來(lái)模擬從表中獲取到的商品數(shù)據(jù)
  9. return [
  10. ['id'=>1, 'name'=>'蘋果電腦', 'model'=>'MacBook Pro', 'price'=>25800],
  11. ['id'=>2, 'name'=>'華為手機(jī)','model'=>'P30 Pro','price'=>4988],
  12. ['id'=>3, 'name'=>'小愛同學(xué)','model'=>'AI音箱','price'=>299],
  13. ];
  14. }
  15. }

4.view視圖

  1. <?php
  2. namespace mvc;
  3. // 視圖類:渲染數(shù)據(jù)
  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>型號(hào)</th><th>價(jià)格</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>';

5

5.Controller控制器

demo1

  1. <?php
  2. // 控制器: 將商品信息表展示出來(lái)
  3. namespace mvc;
  4. // 1. 加載模型
  5. require 'Model.php';
  6. // 2. 加載視圖
  7. require 'View.php';
  8. // 3. 創(chuàng)建控制器
  9. class Controller1
  10. {
  11. public function index()
  12. {
  13. // 3.1 獲取數(shù)據(jù)
  14. $model = new Model();
  15. $data = $model->getData();
  16. // 3.2 渲染模板
  17. $view = new View();
  18. return $view->fetch($data);
  19. }
  20. }
  21. // 4. 客戶端調(diào)用/訪問類成員
  22. $controller = new Controller1();
  23. echo $controller->index();

demo2

  1. <?php
  2. // 控制器: 將商品信息表展示出來(lái)
  3. // 將類中對(duì)其它類的實(shí)例化, 模型/視圖分離出來(lái), 降低耦合度
  4. // 依賴注入
  5. namespace mvc;
  6. // 1. 加載模型
  7. use BaconQrCode\Common\Mode;
  8. require 'Model.php';
  9. // 2. 加載視圖
  10. require 'View.php';
  11. // 3. 創(chuàng)建控制器
  12. class Controller2
  13. {
  14. public function index(Model $model, View $view)
  15. {
  16. // 3.1 獲取數(shù)據(jù)
  17. $data = $model->getData();
  18. // 3.2 渲染模板
  19. return $view->fetch($data);
  20. }
  21. }
  22. // 4. 客戶端調(diào)用/訪問類成員
  23. // 將模型與視圖的實(shí)例化代碼從控制器分離出來(lái), 放到了客戶端
  24. $model = new Model();
  25. $view = new View();
  26. // 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
  27. $controller = new Controller2();
  28. echo $controller->index($model, $view);

demo3

  1. <?php
  2. // 控制器: 將商品信息表展示出來(lái)
  3. // 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
  4. namespace mvc;
  5. // 1. 加載模型
  6. use BaconQrCode\Common\Mode;
  7. require 'Model.php';
  8. // 2. 加載視圖
  9. require 'View.php';
  10. // 3. 創(chuàng)建控制器
  11. class Controller3
  12. {
  13. protected $model;
  14. protected $view;
  15. // 構(gòu)造方法, 注入點(diǎn)改到了構(gòu)造方法中, 實(shí)現(xiàn)了模型與視圖對(duì)象的共享
  16. public function __construct(Model $model, View $view)
  17. {
  18. $this->model = $model;
  19. $this->view = $view;
  20. }
  21. public function index()
  22. {
  23. // 3.1 獲取數(shù)據(jù)
  24. $data = $this->model->getData();
  25. // 3.2 渲染模板
  26. return $this->view->fetch($data);
  27. }
  28. }
  29. // 4. 客戶端調(diào)用/訪問類成員
  30. // 將模型與視圖的實(shí)例化代碼從控制器分離出來(lái), 放到了客戶端
  31. $model = new Model();
  32. $view = new View();
  33. // 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
  34. $controller = new Controller3($model, $view);
  35. echo $controller->index();

demo4

  1. <?php
  2. // 控制器: 將商品信息表展示出來(lái)
  3. // 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
  4. namespace mvc;
  5. // 1. 加載模型
  6. use BaconQrCode\Common\Mode;
  7. require 'Model.php';
  8. // 2. 加載視圖
  9. require 'View.php';
  10. /**************************************************/
  11. //添加服務(wù)容器層
  12. class Container
  13. {
  14. // 容器屬性, 就是一個(gè)數(shù)組,里面全是創(chuàng)建對(duì)象的方法
  15. protected $instance = [];
  16. // 1. 放進(jìn)去: 將類的實(shí)例化過程綁定到容器中
  17. // $alias: 類實(shí)例的別名,
  18. public function bind($alias, \Closure $process)
  19. {
  20. // 將類實(shí)例化的方法綁定/ 存儲(chǔ)到服務(wù)容器中
  21. $this->instance[$alias] = $process;
  22. }
  23. // 2. 取出來(lái): 執(zhí)行容器中的實(shí)例方法
  24. public function make($alias, $params=[])
  25. {
  26. return call_user_func_array($this->instance[$alias], []);
  27. }
  28. }
  29. // 實(shí)例化容器
  30. $container = new Container();
  31. // 用到模型對(duì)象, 視圖對(duì)象,將它們綁定到容器中
  32. $container->bind('model', function () {return new Model();});
  33. $container->bind('view', function () {return new View();});
  34. /**************************************************/
  35. // 3. 創(chuàng)建控制器
  36. class Controller4
  37. {
  38. public function index(Container $container)
  39. {
  40. // 3.1 獲取數(shù)據(jù)
  41. $data = $container->make('model')->getData();
  42. // 3.2 渲染模板
  43. return $container->make('view')->fetch($data);
  44. }
  45. }
  46. // 4. 客戶端調(diào)用/訪問類成員
  47. // 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
  48. $controller = new Controller4();
  49. echo $controller->index($container);

demo5

  1. <?php
  2. // 控制器: 將商品信息表展示出來(lái)
  3. // Facade技術(shù): 規(guī)范/統(tǒng)一了對(duì)外部對(duì)象的調(diào)用方式, 全部改為了靜態(tài)調(diào)用, 不管之前的方法是什么類型
  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. //添加服務(wù)容器層
  13. class Container1
  14. {
  15. // 容器屬性, 就是一個(gè)數(shù)組,里面全是創(chuàng)建對(duì)象的方法
  16. protected $instance = [];
  17. // 1. 放進(jìn)去: 將類的實(shí)例化過程綁定到容器中
  18. // $alias: 類實(shí)例的別名,
  19. public function bind($alias, \Closure $process)
  20. {
  21. // 將類實(shí)例化的方法綁定/ 存儲(chǔ)到服務(wù)容器中
  22. $this->instance[$alias] = $process;
  23. }
  24. // 2. 取出來(lái): 執(zhí)行容器中的實(shí)例方法
  25. public function make($alias, $params=[])
  26. {
  27. return call_user_func_array($this->instance[$alias], []);
  28. }
  29. }
  30. // 實(shí)例化容器
  31. $container = new Container1();
  32. // 用到模型對(duì)象, 視圖對(duì)象,將它們綁定到容器中
  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. // 用服務(wù)容器給它初始化
  42. public static function initialize(Container1 $container)
  43. {
  44. static::$container = $container;
  45. }
  46. // 用靜態(tài)代理方式將模型中的getData()靜態(tài)化
  47. public static function getData()
  48. {
  49. static::$data = static::$container->make('model')->getData();
  50. }
  51. // 用靜態(tài)代理方式將視圖中的fetch()靜態(tài)化
  52. public static function fetch()
  53. {
  54. return static::$container->make('view')->fetch(static::$data);
  55. }
  56. }
  57. // 聲明一學(xué)生類
  58. class Student extends Facade
  59. {
  60. //
  61. }
  62. /**************************************************/
  63. // 3. 創(chuàng)建控制器
  64. class Controller5
  65. {
  66. public function __construct(Container1 $container)
  67. {
  68. // 調(diào)用Faceda里面的初始化方法
  69. Student::initialize($container);
  70. }
  71. public function index()
  72. {
  73. // 3.1 獲取數(shù)據(jù)
  74. Student::getData();
  75. // 3.2 渲染模板
  76. return Student::fetch();
  77. }
  78. }
  79. // 4. 客戶端調(diào)用/訪問類成員
  80. // 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
  81. $controller = new Controller5($container);
  82. echo $controller->index();

手抄作業(yè)




總結(jié)

學(xué)習(xí)了如何使用static:聲明類中的靜態(tài)成員
初步了解了MVC結(jié)構(gòu)與框架基礎(chǔ)
M:model,模型,類用于數(shù)據(jù)表的操作
V:view,視圖類:渲染數(shù)據(jù)
C:Controller,控制器:將商品信息表展示出來(lái)

批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語(yǔ):先寫出最基本的功能 , 然后慢慢填充, 就像是小時(shí)候?qū)懽魑? 先寫一個(gè)大綱
本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)