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

搜索
博主信息
博文 27
粉絲 1
評論 0
訪問量 27559
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
依賴注入,MVC的基本原理和路由的解析-2019年10月11日
思杰的博客
原創(chuàng)
908人瀏覽過

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)前類中,就叫做依賴注入,依賴注入是解耦的重要手段。

實(shí)例

<?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);

運(yùn)行實(shí)例 ?

點(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類


實(shí)例

<?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;
    }
}

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

controller類


實(shí)例

<?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);

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

view類


實(shí)例

<?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;
    }
}

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

111.png

寫一個(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);

222.png

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

老師批語:完成的不錯(cuò)
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報(bào)處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(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+教程免費(fèi)學(xué)