1. 寫一個(gè)依賴注入的案例, 內(nèi)容自定義
2. 寫一個(gè)mvc應(yīng)用的案例, 內(nèi)容自定義
3. 寫一個(gè)簡單的路由, 理解路由的原理與目標(biāo)
課程筆記:
單例模式:類的對象只能實(shí)例化一次,應(yīng)用場景是:數(shù)據(jù)庫的鏈接,HTTP的請求,通過把構(gòu)造函數(shù)設(shè)置成為私有屬性,讓類的外部無法進(jìn)行實(shí)例化,只能通過調(diào)用類里面的方法去進(jìn)行實(shí)例化。方法里面進(jìn)行判斷,如果該類已經(jīng)被實(shí)例化,則已經(jīng)實(shí)例化的對象,如果類還沒有被實(shí)例化,則實(shí)例化一個(gè)新的對象,然后返回回去。
工廠模式:批量創(chuàng)建對象的類。如果沒有專門拿來創(chuàng)建對象的類的話,用戶在調(diào)用的時(shí)候,就需要知道自己具體需要調(diào)用的類是什么,假如這個(gè)類名修改了,則用戶調(diào)用方也需要修改自己的代碼。有了工廠類,用戶只需要關(guān)心自己的調(diào)用的是工廠類,并且把自己的參數(shù)輸入進(jìn)去,而不需要關(guān)心自己這個(gè)生成對象需要通過什么類去解決。生成類的方法由工廠類去調(diào)用,這樣達(dá)到解耦的目的。
MVC:M是model,數(shù)據(jù)模型的意思,是用來讀寫數(shù)據(jù)的。V是view,視圖的意思,負(fù)責(zé)對外展示的代碼。C是controller,控制器的意思,用來協(xié)調(diào)后端的數(shù)據(jù)和前端展示的派發(fā)器。
服務(wù)容器:將對象的創(chuàng)建和使用過程統(tǒng)一管理起來。對象的管理器,把對象的實(shí)例化放在容器中,然后把對象從容器中取出來。
門面模式(facade):把調(diào)用代碼靜態(tài)化。
寫一個(gè)依賴注入的案例, 內(nèi)容自定義
依賴注入,就是將別的類的方法,通過參數(shù)或者方法的形式,直接注入到當(dāng)前類中,就叫做依賴注入,依賴注入是解耦的重要手段。
<?php require 'Model.php'; require 'View.php'; class Controller{ public function index(Model $model,View $view){ $data = $model->getData(); return $view->fetch($data); } } $model =new Model(); $view= new View(); $controller = new Controller(); //將Model和View的類實(shí)例,作為參數(shù)注入到方法中 echo $controller->index($model,$view);
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
如果新建model和controller對象是在控制器類里面實(shí)現(xiàn),那么假如model類和view類的構(gòu)造方法發(fā)生了改變,或者類名發(fā)生了變化,那么控制器類也就變得不能夠使用了。所以用參數(shù)的方法注入到控制器類中,那么控制器類就只用專注自己的業(yè)務(wù)邏輯即可,不用關(guān)心其他類的實(shí)現(xiàn)方式。
寫一個(gè)mvc應(yīng)用的案例, 內(nèi)容自定義
我將老師課堂上講的小案例,通過連接數(shù)據(jù)庫,將數(shù)據(jù)顯示到了前端頁面上。由于MVC模式的相互獨(dú)立工作,所以我只需要在model類中將讀取的數(shù)據(jù)方法重寫,然后將前端相應(yīng)的位置重寫即可。中間的controller類不需要去動(dòng)他,這樣代碼相互之間的獨(dú)立性就很強(qiáng)了。
model類
<?php class Model{ public function getData(){ $dsn = "mysql:host=127.0.0.1;dbname=huangsijie"; $username = "root"; $password = "root"; $pdo = new PDO($dsn,$username,$password); $sql = "select * from `staff`"; $stmt = $pdo->prepare($sql); $stmt->execute(); $array = $stmt->fetchAll(PDO::FETCH_ASSOC); return $array; } }
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
controller類
<?php require 'Model.php'; require 'View.php'; class Controller{ public function index(Model $model,View $view){ $data = $model->getData(); return $view->fetch($data); } } $model =new Model(); $view= new View(); $controller = new Controller(); //將Model和View的類實(shí)例,作為參數(shù)注入到方法中 echo $controller->index($model,$view);
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
view類
<?php class View{ public function fetch($data){ $table = '<table border="1" cellspacing="0" width="600" >'; $table .= '<caption>人民的名義信息表</caption>'; $table .= '<tr bgcolor="lightblue"><th>ID</th><th>姓名</th><th>年齡</th><th>性別</th><th>職位</th><th>手機(jī)</th><th>入職日期</th></tr>'; foreach ($data as $product) { if($product['sex']==1){ $product['sex'] = '男'; }else{ $product['sex'] = '女'; } $product['hiredate'] = date('Y年m月d日',$product['hiredate']); $table .= '<tr>'; $table .= '<td align="center">' . $product['staff_id'] . '</td>'; $table .= '<td align="center">' . $product['name'] . '</td>'; $table .= '<td align="center">' . $product['age'] . '</td>'; $table .= '<td align="center">' . $product['sex'] . '</td>'; $table .= '<td align="center">' . $product['position'] . '</td>'; $table .= '<td align="center">' . $product['mobile'] . '</td>'; $table .= '<td align="center">' . $product['hiredate'] . '</td>'; $table .= '</tr>'; } $table .= '</table>'; return $table; } }
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
寫一個(gè)簡單的路由, 理解路由的原理與目標(biāo)
路由就是域名訪問的路徑,我們通過修改路由,可以將域名解析做自定義的處理。我們通過$_SERVER將域名里面的路由地址解析出來,然后通過explode函數(shù)將每個(gè)/后面的詞變成一個(gè)數(shù)組。
<?php $url = $_SERVER['REQUEST_URI']; $req = explode('/',$url); echo '<pre>'; print_r($req); $route = array_slice($req,3,3); echo '<pre>'; print_r($route); list($module,$controller,$action) = $route; echo $module.' '.$controller.' '.$action; $values = array_slice($req,6,6); for ($i =0 ; $i < count($values); $i+=2){ $user[$values[$i]] = $values[$i+1]; } echo '<pre>'; print_r($user); class User{ public function add($name,$age,$salary){ return __METHOD__.'方法: 姓名'.$name.' 年齡'.$age.' 工資'.$salary; } } echo call_user_func_array([(new User()),'add'],$user);
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號