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

搜索
博主信息
博文 34
粉絲 0
評論 0
訪問量 28323
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
12月4日_static、MVC與框架基礎(chǔ) - 九期線上班
只貓
原創(chuàng)
736人瀏覽過

static、后期靜態(tài)綁定、MVC、依賴注入、容器、Facade門面

demo1

  1. <?php
  2. namespace _1204;
  3. //如果不引用PDO 在當前命名空間下是找不到PDO 或者這里不引用在下面用到的時候?qū)?PDO
  4. use PDO;
  5. //static 聲明靜態(tài)成員
  6. //1.創(chuàng)建類
  7. class Db1
  8. {
  9. //2.添加類成員
  10. //非靜態(tài)成員 在動態(tài)數(shù)據(jù)區(qū) 隨函數(shù)執(zhí)行完就釋放
  11. public $name;
  12. public function demo(){
  13. echo '普通成員';
  14. }
  15. //靜態(tài)成員 靜態(tài)數(shù)據(jù)區(qū) (全局變量、靜態(tài)變量)
  16. //只要程序在 靜態(tài)數(shù)據(jù)就在
  17. //靜態(tài)區(qū)數(shù)據(jù)被所有類的對象所共享
  18. //靜態(tài)屬性
  19. protected static $pdo;
  20. protected static $dsn = 'mysql:host=localhost;dbname=php_2019';
  21. protected static $username = 'root';
  22. protected static $password = '12341234';
  23. //靜態(tài)方法
  24. //***靜態(tài)方法里無法使用動態(tài)屬性
  25. public static function connect(){
  26. self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
  27. }
  28. public static function select(){
  29. self::connect();
  30. return self::$pdo->query('select * from `user`',PDO::FETCH_ASSOC);
  31. }
  32. }
  33. //3.訪問類成員
  34. $res = Db1::select();
  35. foreach ($res as $row){
  36. echo '<pre>' .print_r($row,true). '</pre>';
  37. }

demo2

  1. <?php
  2. namespace _1204;
  3. use PDO;
  4. //static 后期靜態(tài)綁定
  5. //1.創(chuàng)建類
  6. class Db2
  7. {
  8. //2.添加類成員
  9. //靜態(tài)成員 靜態(tài)數(shù)據(jù)區(qū) (全局變量、靜態(tài)變量)
  10. //只要程序在 靜態(tài)數(shù)據(jù)就在
  11. //靜態(tài)區(qū)數(shù)據(jù)被所有類的對象所共享
  12. //靜態(tài)屬性
  13. protected static $pdo;
  14. protected static $dsn = 'mysql:host=localhost;dbname=php_2019';
  15. protected static $username = 'root';
  16. protected static $password = 'root';
  17. //靜態(tài)方法
  18. public static function connect(){
  19. self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
  20. }
  21. public static function select(){
  22. //當前self::connect()改為static::connect()
  23. static::connect();
  24. //靜態(tài)方法繼承時 static可以自動轉(zhuǎn)換目標為當前調(diào)用類
  25. return self::$pdo->query('select * from `user`',PDO::FETCH_ASSOC);
  26. }
  27. }
  28. class Sub extends Db2
  29. {
  30. protected static $username = 'root';
  31. protected static $password = '12341234';
  32. public static function connect(){
  33. self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
  34. }
  35. }
  36. //3.訪問類成員
  37. $res = Sub::select();
  38. foreach ($res as $row){
  39. echo '<pre>' .print_r($row,true). '</pre>';
  40. }

Model

  1. <?php
  2. namespace mvc;
  3. //模型類:用于數(shù)據(jù)表的操作
  4. class Model
  5. {
  6. //在模型類用getData拿到數(shù)據(jù)
  7. public function getData(){
  8. //二維數(shù)組模擬數(shù)據(jù)庫獲取的商品數(shù)據(jù)
  9. return [
  10. [
  11. 'id' => 1,
  12. 'name' =>'蘋果電腦',
  13. 'model'=>'MacBook1',
  14. 'price'=>'20000'
  15. ],
  16. [
  17. 'id' => 2,
  18. 'name' =>'華為電腦',
  19. 'model'=>'HUAWEIBook1',
  20. 'price'=>'12000'
  21. ],
  22. [
  23. 'id' => 3,
  24. 'name' =>'小米電腦',
  25. 'model'=>'MIBook1',
  26. 'price'=>'2000'
  27. ],
  28. [
  29. 'id' => 4,
  30. 'name' =>'戴爾電腦',
  31. 'model'=>'DELLBook1',
  32. 'price'=>'4000'
  33. ]
  34. ];
  35. }
  36. }

View

  1. <?php
  2. namespace mvc;
  3. //視圖:渲染數(shù)據(jù)
  4. class View
  5. {
  6. //在視圖類用fetch渲染數(shù)據(jù) 這里接收一個data
  7. public function fetch($data){
  8. //拼接html頁面內(nèi)容
  9. $table = '<table>';
  10. $table .= '<caption>商品信息表</caption>';
  11. $table .= '<tr><th>ID</th><th>品名</th><th>型號</th><th>價格</th></tr>';
  12. foreach ($data as $product){
  13. $table .='<tr>';
  14. $table .='<td>'. $product['id'] .'</td>';
  15. $table .='<td>'. $product['name'] .'</td>';
  16. $table .='<td>'. $product['model'] .'</td>';
  17. $table .='<td>'. $product['price'] .'</td>';
  18. $table .='</tr>';
  19. }
  20. $table .= '</table>';
  21. return $table;
  22. }
  23. }
  24. echo '
  25. <style>
  26. table {
  27. border-collapse: collapse;
  28. border: 1px solid;
  29. width: 500px;
  30. height: 150px;
  31. margin:auto;
  32. }
  33. caption {
  34. font-size:1.2rem;
  35. margin-bottom: 10px;
  36. }
  37. tr:first-of-type{
  38. background-color:lightblue;
  39. }
  40. td,th{
  41. border:1px solid
  42. }
  43. td:first-of-type{
  44. text-align:center;
  45. }
  46. </style>
  47. ';

Demo_1

  1. <?php
  2. //mvc
  3. //控制器 最初版本
  4. namespace mvc;
  5. //加載
  6. require 'Model.php';
  7. require 'View.php';
  8. class Controller1
  9. {
  10. public function index(){
  11. //1.獲取數(shù)據(jù)
  12. //實例化model類 得到model對象$model
  13. $model = new Model();
  14. //調(diào)用Model類里面的getData方法 得到return的數(shù)據(jù)賦值給$data
  15. $data = $model->getData();
  16. //2.渲染模板
  17. //實例化View類
  18. $view = new View();
  19. //返回 將$data傳給View類中fetch方法后得到的頁面
  20. return $view->fetch($data);
  21. }
  22. }
  23. //客戶端調(diào)用
  24. //實例化
  25. $Controller1 = new Controller1();
  26. echo $Controller1->index();

Demo_2

  1. <?php
  2. //mvc
  3. //控制器 解決依賴
  4. //依賴注入-初步
  5. namespace mvc;
  6. //加載
  7. require 'Model.php';
  8. require 'View.php';
  9. class Controller2
  10. {
  11. public function index(Model $model, View $view){
  12. //1.獲取數(shù)據(jù)
  13. //調(diào)用Model類里面的getData方法 得到return的數(shù)據(jù)賦值給$data
  14. $data = $model->getData();
  15. //2.渲染模板
  16. //返回 將$data傳給View類中fetch方法后得到的頁面
  17. return $view->fetch($data);
  18. }
  19. }
  20. //客戶端調(diào)用
  21. //將實例化代碼從控制器中拿出來 放到客戶端
  22. //實例化model類 得到model對象$model
  23. $model = new Model();
  24. //實例化View類
  25. $view = new View();
  26. //將對象以參數(shù)的形式注入
  27. //實例化Controller
  28. $Controller2 = new Controller2();
  29. echo $Controller2->index($model,$view);

Demo_3

  1. <?php
  2. //mvc
  3. //控制器 解決依賴
  4. //依賴注入-中等
  5. namespace mvc;
  6. //加載
  7. require 'Model.php';
  8. require 'View.php';
  9. class Controller3
  10. {
  11. protected $model;
  12. protected $view;
  13. //注入到普方法中注入一次只能用一次,實現(xiàn)一個類注入一次多次使用
  14. //更改注入點到構(gòu)造方法中
  15. //創(chuàng)建構(gòu)造函數(shù)
  16. public function __construct(Model $model, View $view){
  17. //傳值
  18. $this->model = $model;
  19. $this->view = $view;
  20. }
  21. public function index(){
  22. //1.獲取數(shù)據(jù)
  23. //調(diào)用Model類里面的getData方法 得到return的數(shù)據(jù)賦值給$data
  24. //改為$this調(diào)用
  25. $data = $this->model->getData();
  26. //2.渲染模板
  27. //返回 將$data傳給View類中fetch方法后得到的頁面
  28. //改為$this調(diào)用
  29. return $this->view->fetch($data);
  30. }
  31. }
  32. //客戶端調(diào)用
  33. $model = new Model();
  34. $view = new View();
  35. //實例化Controller
  36. //更改注入點
  37. $Controller3 = new Controller3($model,$view);
  38. echo $Controller3->index();

Demo_4

  1. <?php
  2. //mvc
  3. //控制器 解決依賴
  4. //依賴注入-高級
  5. namespace mvc;
  6. //加載
  7. require 'Model.php';
  8. require 'View.php';
  9. /**************************************/
  10. //添加簡單服務(wù)容器層
  11. class Container
  12. {
  13. // 容器屬性
  14. // 很多類實例 是一個數(shù)組
  15. protected $instance = [];
  16. //放進去 bind方法
  17. //$alias 鍵名 類的別名 $process 一段實例化代碼
  18. public function bind($alias,\CLosure $process){
  19. //將類實例化方法存儲入容器中
  20. //相當于實例化代碼的模板
  21. $this->instance[$alias] = $process;
  22. }
  23. //拿出來 執(zhí)行容器調(diào)用 make方法 $params可以看成構(gòu)造函數(shù)需要傳入的參數(shù)
  24. public function make($alias,$params=[]){
  25. //call_user_func_array 調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
  26. return call_user_func_array($this->instance[$alias], []);
  27. }
  28. }
  29. //實例化容器
  30. $container = new Container();
  31. //將模型、視圖綁定到容器
  32. $container->bind('model',function(){return new Model();});
  33. $container->bind('view',function(){return new View();});
  34. /**************************************/
  35. //控制器
  36. class Controller4
  37. {
  38. //不需要構(gòu)造函數(shù)了。
  39. //注入容器即可
  40. public function index(Container $container){
  41. //1.獲取數(shù)據(jù)
  42. //通過容器獲取model類的實例調(diào)用getData方法
  43. $data = $container->make('model')->getData();
  44. //2.渲染模板
  45. //返回通過容器獲取的view類實例生成的頁面數(shù)據(jù)
  46. return $container->make('view')->fetch($data);
  47. }
  48. }
  49. //客戶端調(diào)用
  50. //實例化Controller
  51. //index方法傳入?yún)?shù)——容器對象
  52. $Controller4 = new Controller4();
  53. echo $Controller4->index($container);

Demo_5

  1. <?php
  2. //mvc
  3. //控制器 解決依賴
  4. //依賴注入-高級+
  5. namespace mvc;
  6. //加載
  7. require 'Model.php';
  8. require 'View.php';
  9. /**************************************/
  10. //添加簡單服務(wù)容器層
  11. class Container1
  12. {
  13. // 容器屬性
  14. // 很多類實例 是一個數(shù)組
  15. protected $instance = [];
  16. //放進去 bind方法
  17. //$alias 鍵名 類的別名 $process 一段實例化代碼
  18. public function bind($alias,\CLosure $process){
  19. //將類實例化方法存儲入容器中
  20. //相當于實例化代碼的模板
  21. $this->instance[$alias] = $process;
  22. }
  23. //拿出來 執(zhí)行容器調(diào)用 make方法 $params可以看成構(gòu)造函數(shù)需要傳入的參數(shù)
  24. public function make($alias,$params=[]){
  25. //call_user_func_array 調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
  26. return call_user_func_array($this->instance[$alias], []);
  27. }
  28. }
  29. //實例化容器
  30. $container = new Container1();
  31. //將模型、視圖綁定到容器
  32. $container->bind('model',function(){return new Model();});
  33. $container->bind('view',function(){return new View();});
  34. /**************************************/
  35. //添加Facede門面層
  36. //將常用到的方法封裝成靜態(tài)
  37. class Facede
  38. {
  39. protected static $container = null;
  40. protected static $data = [];
  41. //初始化方法
  42. public static function initialize(Container1 $container){
  43. static::$container = $container;
  44. }
  45. //靜態(tài)化getData
  46. public static function getData(){
  47. static::$data = static::$container->make('model')->getData();
  48. }
  49. //靜態(tài)化fetch
  50. public static function fetch(){
  51. return static::$container->make('view')->fetch(static::$data);
  52. }
  53. }
  54. /**************************************/
  55. //控制器
  56. class Controller5
  57. {
  58. public function __construct($container){
  59. //調(diào)用Facede里面的初始化方法
  60. Facede::initialize($container);
  61. }
  62. public function index(){
  63. //1.獲取數(shù)據(jù)
  64. Facede::getData();
  65. //2.渲染模板
  66. return Facede::fetch();
  67. }
  68. }
  69. //客戶端調(diào)用
  70. //實例化Controller
  71. //controller傳入$container
  72. $Controller5 = new Controller5($container);
  73. echo $Controller5->index();


手抄

總結(jié):課上聽懂百分之10,今天又看了兩遍懂了百分之30了,大不了看十遍唄。傳參那塊比較迷,括號內(nèi)先定義個類型在寫上變量這種寫法第一次見,不了解也不太懂。有點好奇,這樣一次次的改進,代碼看著越來越高大上了,它是誰想出來的呢又是怎么大家都開始使用經(jīng)歷了個什么過程呢?

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

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

老師批語:每個人都會有這個過程, 你覺得有難度, 其它人也是一樣, 搞明白了你就贏了
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
作者最新博文
關(guān)于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

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

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