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

搜索
博主信息
博文 35
粉絲 3
評(píng)論 0
訪問(wèn)量 31177
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
12月4日作業(yè) php mvc 容器 門面類
隨風(fēng)
原創(chuàng)
912人瀏覽過(guò)

php mvc 容器 門面類

課堂源碼

model

`<?php

namespace gzg;
// require DIR . ‘/pdo.php’;
class Model
{
public function getDate()
{
return [
[‘id’=>1, ‘name’=>’蘋果電腦’, ‘model’=>’MacBook Pro’, ‘price’=>25800],
[‘id’=>2, ‘name’=>’華為手機(jī)’,’model’=>’P30 Pro’,’price’=>4988],
[‘id’=>3, ‘name’=>’小愛同學(xué)’,’model’=>’AI音箱’,’price’=>299],
];
}
}

// $obj = new Model();
//print_r( $obj->getDate());
`

view

`<?php

namespace gzg;
// 視圖類:渲染數(shù)據(jù)
class View
{
public function fetch($data)
{
$table = ‘<table>‘;
$table .= ‘<caption>商品信息表</caption>‘;
$table .= ‘<tr><th>ID</th><th>品名</th><th>型號(hào)</th><th>價(jià)格</th></tr>‘;

  1. foreach ($data as $product) {
  2. $table .= '<tr>';
  3. $table .= '<td>' . $product['id'] . '</td>';
  4. $table .= '<td>' . $product['name'] . '</td>';
  5. $table .= '<td>' . $product['model'] . '</td>';
  6. $table .= '<td>' . $product['price'] . '</td>';
  7. $table .= '</tr>';
  8. }
  9. $table .= '</table>';
  10. return $table;
  11. }

}

echo ‘<style>
table {border-collapse: collapse; border: 1px solid; width: 500px;height: 150px}
caption {font-size: 1.2rem; margin-bottom: 10px;}
tr:first-of-type { background-color:lightblue;}
td,th {border: 1px solid}
td:first-of-type {text-align: center}
</style>‘;`

cont

`<?php

// 控制器: 將商品信息表展示出來(lái)
namespace gzg;

// 1. 加載模型
require ‘Model.php’;

// 2. 加載視圖
require ‘View.php’;

// 3. 創(chuàng)建控制器
class Controller1
{
public function index()
{
// 3.1 獲取數(shù)據(jù)
$model = new Model();
$data = $model->getDate();

  1. // 3.2 渲染模板
  2. $view = new View();
  3. return $view->fetch($data);
  4. }

}
// 4. 客戶端調(diào)用/訪問(wèn)類成員
$cont = new Controller1();
echo $cont->index();
`

cont1

`<?php

// 控制器: 將商品信息表展示出來(lái)
// 將類中對(duì)其它類的實(shí)例化, 模型/視圖分離出來(lái), 降低耦合度

// 依賴注入 傳參
namespace gzg;

// 1. 加載模型
require ‘Model.php’;

// 2. 加載視圖
require ‘View.php’;

// 3. 創(chuàng)建控制器
class Controller2
{
// public function index( $model,$view)
// Model類的$model參數(shù) ,View 類的$view參數(shù)
// 依賴注入 接收參數(shù)
public function index(Model $model,View $view)
{
// 3.1 獲取數(shù)據(jù)

  1. $data = $model->getDate();
  2. // 3.2 渲染模板
  3. return $view->fetch($data);
  4. }

}
// 4. 客戶端調(diào)用/訪問(wèn)類成員
// 將模型與視圖的實(shí)例化代碼從控制器分離出來(lái), 放到了客戶端
$model = new Model();
$view = new View();
// 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
$cont = new Controller2();
//注入?yún)?shù)
// 依賴注入 傳參
echo $cont->index($model,$view);
`

cont2

`<?php

// 控制器: 將商品信息表展示出來(lái)
// 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
namespace gzg;

// 1. 加載模型
//use BaconQrCode\Common\Mode;
require ‘Model.php’;

// 2. 加載視圖
require ‘View.php’;

// 3. 創(chuàng)建控制器
class Controller3
{
protected $model;
protected $view;
// 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
public function __construct(Model $model,View $view)
{
$this->model =$model;
$this->view =$view;

  1. }

// public function index( $model,$view)
// Model類的$model參數(shù) ,View 類的$view參數(shù)
// public function index(Model $model,View $view)
// 使用構(gòu)造函數(shù)中的參數(shù)
public function index()
{
// 3.1 獲取數(shù)據(jù)

// $data = $model->getDate();
// 3.1 獲取數(shù)據(jù)
$data = $this->model->getDate();

  1. // 3.2 渲染模板
  2. return $this->view->fetch($data);
  3. }

// return $view->fetch($data);

}
// 4. 客戶端調(diào)用/訪問(wèn)類成員
// 將模型與視圖的實(shí)例化代碼從控制器分離出來(lái), 放到了客戶端
$model = new Model();
$view = new View();
// 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
// 傳給構(gòu)造器
$cont = new Controller3($model,$view);
//注入?yún)?shù)
echo $cont->index();

`

cont3

`<?php

// 控制器: 將商品信息表展示出來(lái)
// 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
namespace gzg;

// 1. 加載模型
//use BaconQrCode\Common\Mode;
require ‘Model.php’;

// 2. 加載視圖
require ‘View.php’;
//3、 加載 容器
//require ‘Container.php’;

class Container
{
// 容器屬性, 就是一個(gè)數(shù)組,里面全是創(chuàng)建對(duì)象的方法
protected $intstance = [];

  1. // 1. 放進(jìn)去: 將類的實(shí)例化過(guò)程綁定到容器中
  2. // $alias: 類實(shí)例的別名,
  3. public function bind($alias , \closure $process)
  4. {
  5. // 將類實(shí)例化的方法綁定/ 存儲(chǔ)到服務(wù)容器中
  6. $this->intstance[$alias] = $process;

// 例如 Model View
// $this -> intstance [‘model’] =new \gzg\Model(x,y);
// $this -> intstance [‘view’] =new \gzg\View(x,y );
}
// 2. 取出來(lái): 執(zhí)行容器中的實(shí)例方法
public function make ($alias ,$params=[])
{
// call_user_func_array() 全局函數(shù)的回調(diào)
return call_user_func_array($this->intstance[$alias],[]);
}

}

$container = new Container();
// 用到模型對(duì)象, 視圖對(duì)象,將它們綁定到容器中
$container-> bind(‘model’,function () {return new \gzg\Model();});
$container->bind(‘view’,function (){return new View();});

// 3. 創(chuàng)建控制器
class Controller4
{
// protected $model;
// protected $view;
// 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
// public function __construct(Model $model,View $view)
// {
// $this->model =$model;
// $this->view =$view;
//
// }

// public function index( $model,$view)
// Model類的$model參數(shù) ,View 類的$view參數(shù)
// public function index(Model $model,View $view)
// 使用構(gòu)造函數(shù)中的參數(shù)
public function index(Container $container)
{
// 3.1 獲取數(shù)據(jù)

// $data = $model->getDate();
// 3.1 獲取數(shù)據(jù)
$data = $container->make(‘model’)->getDate();

  1. // 3.2 渲染模板
  2. return $container->make('view')->fetch($data);
  3. }

// return $view->fetch($data);

}
// 4. 客戶端調(diào)用/訪問(wèn)類成員
// 將模型與視圖的實(shí)例化代碼從控制器分離出來(lái), 放到了客戶端
//$model = new Model();
//$view = new View();
// 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
// 傳給構(gòu)造器
$cont = new Controller4();
//注入?yún)?shù)
echo $cont->index($container);

`

cont4

`<?php

// 控制器: 將商品信息表展示出來(lái)
// 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
namespace gzg;

// 1. 加載模型
//use BaconQrCode\Common\Mode;
require ‘Model.php’;

// 2. 加載視圖
require ‘View.php’;
//3、 加載 容器
//require ‘Container.php’;

class Container1
{
// 容器屬性, 就是一個(gè)數(shù)組,里面全是創(chuàng)建對(duì)象的方法
protected $intstance = [];

  1. // 1. 放進(jìn)去: 將類的實(shí)例化過(guò)程綁定到容器中
  2. // $alias: 類實(shí)例的別名,
  3. public function bind($alias , \closure $process)
  4. {
  5. // 將類實(shí)例化的方法綁定/ 存儲(chǔ)到服務(wù)容器中
  6. $this->intstance[$alias] = $process;

// 例如 Model View
// $this -> intstance [‘model’] =new \gzg\Model(x,y);
// $this -> intstance [‘view’] =new \gzg\View(x,y );
}
// 2. 取出來(lái): 執(zhí)行容器中的實(shí)例方法
public function make ($alias ,$params=[])
{
// call_user_func_array() 全局函數(shù)的回調(diào)
return call_user_func_array($this->intstance[$alias],[]);
}

}

$container = new Container1();
// 用到模型對(duì)象, 視圖對(duì)象,將它們綁定到容器中
$container-> bind(‘model’,function () {return new \gzg\Model();});
$container->bind(‘view’,function (){return new View();});

/**/
// 添加Facade門面類
class Facade
{
protected static $container = null;
protected static $data = [];

  1. // 用服務(wù)容器給它初始化
  2. public static function initialize(Container1 $container)
  3. {
  4. static::$container =$container;
  5. }
  6. // 用靜態(tài)代理方式將模型中的getData()靜態(tài)化
  7. public static function getDate()
  8. {
  9. static::$data = static::$container->make('model')->getDate();
  10. }
  11. // 用靜態(tài)代理方式將視圖中的fetch()靜態(tài)化
  12. public static function fetch()
  13. {
  14. return static::$container->make('view')->fetch(static::$data);
  15. }

}

// 3. 創(chuàng)建控制器
class Controller5
{
// protected $model;
// protected $view;
// 依賴注入: 將注入點(diǎn)改到了控制器的構(gòu)造方法中
public function __construct(Container1 $container)
{
// $this->model =$model;
// $this->view =$view;
Facade::initialize($container);

  1. }

// public function index( $model,$view)
// Model類的$model參數(shù) ,View 類的$view參數(shù)
// public function index(Model $model,View $view)
// 使用構(gòu)造函數(shù)中的參數(shù)
public function index()
{
Facade::getDate();
return Facade::fetch();
// 3.1 獲取數(shù)據(jù)

// $data = $model->getDate();
// 3.1 獲取數(shù)據(jù)
// $data = $container->make(‘model’)->getDate();

  1. // 3.2 渲染模板

// return $container->make(‘view’)->fetch($data);
}
// return $view->fetch($data);

}
// 4. 客戶端調(diào)用/訪問(wèn)類成員
// 將模型與視圖的實(shí)例化代碼從控制器分離出來(lái), 放到了客戶端
//$model = new Model();
//$view = new View();
// 將模型對(duì)象與視圖對(duì)象,以參數(shù)的方式再次注入到控制器的方法
// 傳給構(gòu)造器
$cont = new Controller5($container);
//注入?yún)?shù)
echo $cont->index();

`

手抄


總結(jié)

學(xué)習(xí)了mvc 容器 門面類 ,MVC 沒有多大問(wèn)題,門面類 就把類靜態(tài)化 。關(guān)鍵是容器感覺似懂非懂,請(qǐng)老師重點(diǎn)講一下

容器 \closure $process 代表的意思還是不懂,這是自己定義的嗎?

call_user_func_array 函數(shù)是回調(diào),我在網(wǎng)上查了半天請(qǐng)老師在點(diǎn)一下。

另外 容器和門面類 如何放到新建 php文件中,如何調(diào)用 如何回傳參數(shù) 。 請(qǐng)老師指點(diǎn)一下。

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

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

老師批語(yǔ):閉包也是一種數(shù)據(jù)類型, 它的值是一個(gè)函數(shù).... call_user_func_array(), 由系統(tǒng)來(lái)代理用戶調(diào)用一個(gè)函數(shù)/方法, 而不需要用戶主動(dòng)調(diào)用
本博文版權(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é)