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

搜索
博主信息
博文 56
粉絲 1
評(píng)論 0
訪問(wèn)量 76201
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
MVC實(shí)現(xiàn)一個(gè)簡(jiǎn)單的業(yè)務(wù)邏輯
零龍
原創(chuàng)
1067人瀏覽過(guò)

MVC

  • M :MODEL ,模型,數(shù)據(jù)庫(kù)操作
  • V :VIEW 視圖,頁(yè)面,html
  • C :Controller,控制器

    MVC運(yùn)行流程

  • View->Controller->Model 前端視圖->處理操作->后端操作

  • Model->Controller->View 后端操作->處理操作->前段視圖

示例:

  • Model.php 后端操作
  1. <?php
  2. namespace MVC_test;
  3. use PDO;
  4. class Model
  5. {
  6. public function myDate()
  7. {
  8. return ($pdo = new PDO('mysql:host=localhost;dbname=mysqli','root','142536'))
  9. ->query('select * from user limit 10')->fetchAll(PDO::FETCH_ASSOC);
  10. }
  11. }

示例圖:

  • Model.php 功能主要是一個(gè)連接數(shù)據(jù)庫(kù)類

  • View.php 前端視圖

  1. <?php
  2. namespace MVC_test;
  3. class View
  4. {
  5. public function mysHow($data)
  6. {
  7. $table = '<table>';
  8. $table.='<tr></tr>';
  9. $table .= '<caption>用戶信息表</caption>';
  10. $table .= '<tr><th>用戶名</th><th>性別</th><th>年齡</th><th>郵箱</th><th>手機(jī)</th></tr>';
  11. foreach($data as $user)
  12. {
  13. $table .= '<tr>';
  14. $table .= '<td>'.$user['username'].'</td>';
  15. $table .= '<td>'.$user['sex'].'</td>';
  16. $table .= '<td>'.$user['age'].'</td>';
  17. $table .= '<td>'.$user['email'].'</td>';
  18. $table .= '<td>'.$user['mobile'].'</td>';
  19. }
  20. $table.='<tr></table>';
  21. return $table;
  22. }
  23. }
  24. echo '<style>
  25. table {border-collapse: collapse; border: 1px solid;text-align: center; width: 500px;height: 150px;width: 600px;}
  26. caption {font-size: 1.2rem; margin-bottom: 10px;}
  27. tr:first-of-type { background-color:yellow;}
  28. td,th {border: 1px solid; padding:5px}
  29. </style>';

示例圖:

  • View.php 在前端展示的類
  • Controller.php 操作控制器

示例:

  1. <?php
  2. namespace MVC_test;
  3. require 'Model.php';
  4. require 'View.php';
  5. class Controller
  6. {
  7. public function Index()
  8. {
  9. $data = (new Model)->myDate();
  10. //引入Model.php的myDate方法(鏈接數(shù)據(jù)庫(kù))
  11. return (new View)->mysHow($data);
  12. //返回引入View.php的mysHow方法(展示html)
  13. }
  14. }
  • Controller.php 引入Model.php和View.php 寫入Index()方法。
  • 此方法適用于簡(jiǎn)單的少量類調(diào)用。

  • Controller_1.php 操作控制器

示例

  1. <?php
  2. namespace MVC_test;
  3. require 'Model.php';
  4. require 'View.php';
  5. class Controller_1
  6. {
  7. private $data = NULL;
  8. private $show = NULL;
  9. public function __construct($data,$show)
  10. {
  11. $this->data = $data;
  12. $this->show = $show;
  13. }
  14. public function Index()
  15. {
  16. $this->data = (new Model)->myDate();
  17. return $this->show = (new View)->mysHow($this->data);
  18. }
  19. }
  • Controller_1.php 引入Model.php和View.php 寫入Index()方法。
  • 使用構(gòu)造函數(shù),將引用的類加載,此方法適用于簡(jiǎn)單的少量類調(diào)用,相對(duì)第一張?jiān)黾恿思夹g(shù)含量。

  • Controller_2.php 操作控制器

示例:

  1. <?php
  2. namespace MVC_test;
  3. use Closure;
  4. //加載模型類
  5. require 'Model.php';
  6. //加載視圖類
  7. require 'View.php';
  8. //服務(wù)容器
  9. class Container
  10. {
  11. // 1. 服務(wù)容器
  12. protected $instances = [];
  13. //定義一個(gè)空數(shù)組來(lái)存儲(chǔ)對(duì)象
  14. public function bInd($alias, Closure $process)
  15. // 2. 向?qū)ο笕萜髦刑砑訉?duì)象
  16. // 參數(shù)1: 是外部對(duì)象在當(dāng)前對(duì)象容器數(shù)組中的鍵名/別名
  17. // 參數(shù)2: 是當(dāng)前需要綁定到容器的對(duì)象的實(shí)例化過(guò)程(函數(shù))
  18. {
  19. $this->instances[$alias] = $process;
  20. //將實(shí)例化過(guò)程寫入服務(wù)容器
  21. }
  22. public function make($alias,$params=[])
  23. // 3. 從對(duì)象容器中取出對(duì)象, 調(diào)用它
  24. // 參數(shù)1:傳入服務(wù)容器中的別名
  25. // 參數(shù)2:一個(gè)空的數(shù)組
  26. {
  27. return call_user_func_array($this->instances[$alias], []);
  28. // 從instances中取出對(duì)象名
  29. // call_user_func_array :調(diào)用回調(diào)函數(shù),并把一個(gè)數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)。
  30. }
  31. }
  32. // 將外部對(duì)象: Model, View的實(shí)例綁定到服務(wù)容器中
  33. $container = new Container;
  34. // 綁定模型類實(shí)例綁定到服務(wù)容器中
  35. $container->bInd('model', function(){
  36. return new Model();
  37. });
  38. $container->bInd('view',function(){
  39. return new View();
  40. });
  41. class Controller_2
  42. {
  43. public function Index(Container $container)
  44. {
  45. $data = $container->make('model')-> myDate();
  46. return $container->make('view')->mysHow($data);
  47. }
  48. }
  • Controller_2.php 引入Model.php和View.php 寫入Index()方法。
  • 使用服務(wù)容器,將Model()和View.php,寫入數(shù)組中,然后在調(diào)用。
  • 服務(wù)容器:定義一個(gè)空數(shù)組來(lái)存儲(chǔ)對(duì)象,使用bind方法將實(shí)例化的類存儲(chǔ)到數(shù)組中bind需要兩個(gè)參數(shù),1.數(shù)組存儲(chǔ)的位置。2.閉包實(shí)例化過(guò)程存儲(chǔ)到數(shù)組。
    需要用到 call_user_func_array :調(diào)用回調(diào)函數(shù),并把一個(gè)數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)。重點(diǎn):將沒(méi)收示例綁定到服務(wù)容器中。bind(‘實(shí)例名’,function(){ return new Model())})函數(shù)返回Model.php的實(shí)例化對(duì)象。
    此種寫法可以在更多的類實(shí)例化調(diào)用中更加的快捷方便,只需在bind綁定中添加需要實(shí)例化的類,在進(jìn)行調(diào)用。

  • Controller_3.php 操作控制器

示例:

  1. <?php
  2. namespace MVC_test;
  3. use Closure;
  4. //加載模型類
  5. require 'Model.php';
  6. //加載視圖類
  7. require 'View.php';
  8. //服務(wù)容器
  9. class Container_1
  10. {
  11. // 1. 服務(wù)容器
  12. protected $instances = [];
  13. //定義一個(gè)空數(shù)組來(lái)存儲(chǔ)對(duì)象
  14. public function bInd($alias, Closure $process)
  15. // 2. 向?qū)ο笕萜髦刑砑訉?duì)象
  16. // 參數(shù)1: 是外部對(duì)象在當(dāng)前對(duì)象容器數(shù)組中的鍵名/別名
  17. // 參數(shù)2: 是當(dāng)前需要綁定到容器的對(duì)象的實(shí)例化過(guò)程(函數(shù))
  18. {
  19. $this->instances[$alias] = $process;
  20. //將實(shí)例化過(guò)程寫入服務(wù)容器
  21. }
  22. public function make($alias,$params=[])
  23. // 3. 從對(duì)象容器中取出對(duì)象, 調(diào)用它
  24. // 參數(shù)1:傳入服務(wù)容器中的別名
  25. // 參數(shù)2:一個(gè)空的數(shù)組
  26. {
  27. return call_user_func_array($this->instances[$alias], []);
  28. // 從instances中取出對(duì)象名
  29. // call_user_func_array :調(diào)用回調(diào)函數(shù),并把一個(gè)數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)。
  30. }
  31. }
  32. // 將外部對(duì)象: Model, View的實(shí)例綁定到服務(wù)容器中
  33. $container = new Container_1;
  34. // 綁定模型類實(shí)例綁定到服務(wù)容器中
  35. $container->bInd('model', function(){
  36. return new Model();
  37. });
  38. $container->bInd('view',function(){
  39. return new View();
  40. });
  41. // --------------------------------------------------------
  42. class Facade
  43. {
  44. //服務(wù)容器
  45. protected static $container =NULL;
  46. // 初始化方法:就是給當(dāng)前的Facade類扣$container屬性賦值
  47. //整理為Facade的構(gòu)造方法
  48. //將外部的服務(wù)容器注入到當(dāng)前的facade中
  49. public static function initialize(Container_1 $container)
  50. {
  51. static::$container = $container;
  52. }
  53. }
  54. class UserModel extends Facade
  55. {
  56. public static function myDate()
  57. {
  58. return static::$container->make('model')->myDate();
  59. }
  60. }
  61. class UserView extends Facade
  62. {
  63. public static function mysHow($data)
  64. {
  65. return static::$container->make('view')->mysHow($data);
  66. }
  67. }
  68. // --------------------------------------------------------
  69. class Controller_3
  70. {
  71. //構(gòu)造方法,初始化facade
  72. public function __construct(Container_1 $container)
  73. {
  74. Facade::initialize($container);
  75. }
  76. public function Index()
  77. {
  78. //1.獲取數(shù)據(jù)
  79. $data =UserModel::myDate();
  80. //2.渲染模板
  81. return UserView::mysHow($data);
  82. }
  83. }
  • Controller_3.php 引入Model.php和View.php 寫入Index()方法。
  • 繼承Controller_2中添加類Facade,通過(guò)子類及方法將類的實(shí)例化通過(guò)靜態(tài)方法調(diào)用。

  • Index.php 前段調(diào)用顯示

示例:

  1. <?php
  2. namespace MVC_test;
  3. // --------------------------
  4. // require 'Controller.php';
  5. // $index = new Controller;
  6. // echo $index->Index();
  7. // ------------>Controller控制器的引用
  8. // require 'Controller_1.php';
  9. // $index = new Controller_1($data,$show);
  10. // echo $index->Index();
  11. // ------------>Controller_1控制器的引用
  12. // --------服務(wù)容器----------
  13. // require 'Controller_2.php';
  14. // $index = new Controller_2();
  15. // echo $index->Index($container);
  16. // ------------>Controller_2控制器的引用
  17. //-----------Facade-----------
  18. require 'Controller_3.php';
  19. $index = new Controller_3($container);
  20. echo $index->Index();
  • Index.php 用戶訪問(wèn)顯示。調(diào)用了控制器方法。實(shí)現(xiàn)了MVC的業(yè)務(wù)邏輯。

總結(jié):在對(duì)MVC的學(xué)習(xí)中,掌握了服務(wù)容器及facade對(duì)類實(shí)例化對(duì)象的使用。不需要再對(duì)每個(gè)類實(shí)例化繁瑣調(diào)用。也大體的掌握了面對(duì)對(duì)象編程的業(yè)務(wù)邏輯。

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

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

老師批語(yǔ):其實(shí)這些都是一些最簡(jiǎn)單的業(yè)務(wù)思想, 一定要領(lǐng)會(huì)
本博文版權(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é)