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

搜索
博主信息
博文 64
粉絲 6
評(píng)論 2
訪問量 100644
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
php 中的MVC,服務(wù)容器,門面技術(shù),路由解析
王嬌
原創(chuàng)
882人瀏覽過

學(xué)習(xí)總結(jié)

  • 使用MVC可以有效的把底層的數(shù)據(jù)庫(kù)操作和前端的頁(yè)面渲染分開
  • 使用服務(wù)容器可以把模型和視圖封裝在服務(wù)容器中,減少對(duì)外部對(duì)象的依賴
  • 門面技術(shù),可以把模型和視圖中的普通方法封裝成靜態(tài)方法,方便客戶端調(diào)用
  • 路由解析可以把url地址中的控制器,方法,參數(shù)進(jìn)行有效解析

效果展示

1.模型類 Model.php

  1. <?php
  2. namespace nMVC
  3. {
  4. use PDO;
  5. class Model
  6. {
  7. public function getData():array
  8. {
  9. $dbConn = new \PDO('mysql:host=localhost;dbname=db_phpstudy','root','root');
  10. $res = $dbConn->query('SELECT * FROM `tb_goods` LIMIT 10')->fetchAll(\PDO::FETCH_ASSOC);
  11. return $res;
  12. }
  13. }
  14. }
  15. ?>

2.視圖類 View.php

  1. <?php
  2. namespace nMVC
  3. {
  4. class View
  5. {
  6. public function showData($records)
  7. {
  8. echo '<style>
  9. * {
  10. padding: 0px;
  11. margin: 0px;
  12. box-sizing: border-box;
  13. }
  14. .show
  15. {
  16. width: 600px;
  17. height: 500px;
  18. border: 1px solid #555;
  19. margin-left: auto;
  20. margin-right: auto;
  21. margin-top:20px;
  22. background-color: lightseagreen;
  23. display: flex;
  24. flex-flow: column nowrap;
  25. justify-content: space-evenly;
  26. align-items: center;
  27. }
  28. .show>div
  29. {
  30. width: 100%;
  31. border-bottom: 1px solid white;
  32. display: flex;
  33. flex-flow: row nowrap;
  34. justify-content: space-evenly;
  35. align-items: center;
  36. }
  37. .show>div:first-of-type
  38. {
  39. font-size: larger;
  40. font-weight: bolder;
  41. }
  42. .show>div>span
  43. {
  44. text-align: center;
  45. }
  46. .show > div > span:nth-of-type(1) {
  47. width: 50px;
  48. }
  49. .show > div > span:nth-of-type(2) {
  50. width: 150px;
  51. }
  52. .show > div > span:nth-of-type(3) {
  53. width: 150px;
  54. }
  55. .show > div > span:nth-of-type(4) {
  56. width: 100px;
  57. }
  58. </style>';
  59. echo '<div class="show">';
  60. echo '<h2>商品信息展示</h2>';
  61. echo '<div><span>編號(hào)</span><span>名稱</span><span>價(jià)格</span><span>時(shí)間</span></div>';
  62. foreach($records as $record)
  63. {
  64. echo '<div >';
  65. echo '<span>',"{$record['id']}",'</span>';
  66. echo '<span>',"{$record['name']}",'</span>';
  67. echo '<span>',"{$record['price']}\\{$record['unit']}",'</span>';
  68. echo '<span>',"{$record['sdate']}",'</span>';
  69. echo '</div>';
  70. }
  71. echo '</div>';
  72. }
  73. }
  74. }
  75. ?>

3.服務(wù)容器類 Container.php

  1. <?php
  2. namespace nMVC
  3. {
  4. require 'Model.php';
  5. require 'View.php';
  6. class Container
  7. {
  8. protected $case = [];
  9. public function bind($alias,\Closure $proce)
  10. {
  11. $this->case[$alias] = $proce;
  12. }
  13. public function make($alias)
  14. {
  15. return call_user_func_array($this->case[$alias],[]);
  16. }
  17. public function delete($alias)
  18. {
  19. unset($this->case[$alias]);
  20. }
  21. }
  22. }
  23. ?>

4.門面類 Facede.php

  1. <?php
  2. namespace nMVC
  3. {
  4. require 'Container.php';
  5. class Facede
  6. {
  7. protected static $container = null;
  8. protected static $data = [];
  9. public static function init($container)
  10. {
  11. static::$container = $container;
  12. }
  13. }
  14. class Model1 extends Facede
  15. {
  16. public static function getdata()
  17. {
  18. static::$data = static::$container->make('model')->getdata();
  19. }
  20. }
  21. class View1 extends Facede
  22. {
  23. public static function showdata()
  24. {
  25. $records = static::$container->make('view')->showdata(static::$data);
  26. return $records;
  27. }
  28. }
  29. }
  30. ?>

5.控制器類 Controller4.php

  1. <?php
  2. namespace nMVC
  3. {
  4. require 'Facede.php';
  5. class Controller4
  6. {
  7. public function __construct(Container $container)
  8. {
  9. Facede::init($container);
  10. }
  11. public function index()
  12. {
  13. Model1::getdata();
  14. return View1::showdata();
  15. }
  16. }
  17. echo 'controller4 Facede 門面技術(shù)<br>';
  18. //創(chuàng)建一個(gè)服務(wù)容器的對(duì)象
  19. $container = new Container();
  20. //服務(wù)容器綁定數(shù)據(jù)
  21. $container->bind('model',function(){ return new Model; });
  22. $container->bind('view',function(){ return new View; });
  23. //創(chuàng)建一個(gè)控制器
  24. $controller4 = new Controller4($container);
  25. echo $controller4->index();
  26. //對(duì)象銷毀
  27. $container->delete('model');
  28. $container->delete('view');
  29. }
  30. ?>

6.路由解析Route.php

  1. <?php
  2. class GoodsController
  3. {
  4. public function showdata($id,$name)
  5. {
  6. echo '商品編號(hào):',$id,'<br>';
  7. echo '商品名稱:',$name,'<br>';
  8. }
  9. }
  10. //http://localhost/php11/0514/Route.php/goods/showdata/id/1/name/%E7%99%BD%E8%8F%9C/sdate
  11. //獲取pathinfo信息
  12. $pathInfoStr = $_SERVER['PATH_INFO'];
  13. //過慮空數(shù)組元素,生成一個(gè)數(shù)組
  14. $pathInfoArr = array_values(array_filter(explode('/',$pathInfoStr)));
  15. //獲取要訪問的控制器
  16. $controller =ucfirst(array_shift($pathInfoArr)) .'Controller';
  17. //獲取要訪問的控制器的方法
  18. $method = array_shift($pathInfoArr);
  19. //獲取參數(shù)
  20. $paras = [];
  21. for($i=0;$i<count($pathInfoArr);$i+=2):
  22. //如果參數(shù)沒有值就不解析這個(gè)參數(shù)
  23. if(isset($pathInfoArr[$i+1])):
  24. $paras[$pathInfoArr[$i]] = $pathInfoArr[$i+1];
  25. endif;
  26. endfor;
  27. //動(dòng)態(tài)生成一個(gè)控制器類,動(dòng)態(tài)調(diào)用控制器類中的方法
  28. $goods = new $controller();
  29. $goods->$method(...array_values($paras));
  30. ?>

效果展示

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

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

老師批語:這個(gè)案例將我們之前的不少函數(shù)知識(shí)都用到了
本博文版權(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é)