亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

大話PHP設計模式

Rango PHP開發工程師
難度中級
時長 3小時30分
學習人數
綜合評分9.57
140人評價 查看評價
9.7 內容實用
9.4 簡潔易懂
9.6 邏輯清晰
  • 單例模式:避免重復多次實例化一個對象,造成資源浪費

    Factory.php

    <?php

    namespace IMooc;

    class Factory{


    static function DataBase(){

    $db = Database::getInstance();

    return $db;

    }

    }

    Database.php

    <?php

    namespace IMooc;

    class Database{

    private static $db;

    //禁止通過外部實例化該類

    private function __construct(){


    }

    //禁止通過外部客戶該類

    private function __clone(){

    }

    //靜態方法中只能調用靜態屬性或者靜態方法,非靜態方法可以調用靜態屬性或者靜態方法

    static function getInstance(){

    //instanceof?判斷一個對象是否是某個類的實例 或是某個類的子類

    ???? if(self::$db instanceof self){

    ???? ????return self::$db;

    ???? }else{

    ???????? self::$db = new self();

    ???????? return self::$db;

    ???? }


    }

    }

    index.php

    <?php

    define("BASEDIR",__DIR__);

    require BASEDIR."/IMooc/Loader.php";

    // 使用命名空間加載Loader類? 當實例化的類不存在此文件中,都會調用spl_autoload_register方法,默認作用同__autoload方法相似? 都會對使用到的類進行加載

    spl_autoload_register可對使用的類進行重復加載 __autoload不會

    \\IMooc\\Loader::autoload 命名空間下的某個類方法,該方法用來加載當前文件中不存在的類

    spl_autoload_register("\\IMooc\\Loader::autoload");

    $dbObject = IMooc\Factory::DataBase();

    var_dump($dbObject);

    Loader.php

    <?php

    namespace IMooc;

    class Loader{

    static function autoload($class){

    require BASEDIR."/".str_replace("\\","/",$class).".php";

    }

    }


    查看全部
    0 采集 收起 來源:[php]單例模式

    2018-05-03

  • 當開發中需要訪問數據庫或者接口的時候,將所有的類都通過工廠模式生成一下,避免修改業務邏輯代碼

    查看全部
    1 采集 收起 來源:[php]工廠模式

    2018-05-02

  • php三種設計模式

    查看全部
  • ## MVC

    模型-視圖-控制器 ,一種C/S或者B/S軟件工程的組織方式。

    ? ? - 模型(Model):數據和存儲的封裝

    ? ? - 視圖(View):展現層的封裝,如Web系統中的模板文件

    ????- 控制器(Controller):邏輯層的封裝

    查看全部
    1 采集 收起 來源:MVC結構

    2018-04-30

  • ????public?static?function?getDatabase(?$id?=?'master'?)
    ????{
    ????????$key?=?'database_'.$id;
    ????????if(?$id?==?'master'?){
    ????????????$db_config?=?Application::getInstance()->config['database']['master'];
    ????????}?else?{
    ????????????$db_configs??=?Application::getInstance()->config['database']['slave'];
    ????????????$db_config?=?$db_configs[array_rand($db_configs)];
    ????????}
    ????????$db?=?Register::get($key);
    ????????if(?!$db?){
    ????????????//使用use導入MySqli
    ????????????$db?=?new?MySqli();
    ????????????$db->connect($db_config);
    ????????????Register::set($key,?$db);
    ????????}
    ????????return?$db;
    ????}


    查看全部
  • #### 簡單實例

    我們讓所有客戶端訂閱我們的服務端,那么當我們的服務端有更新信息的時候,就通知客戶端去更新。這里的服務端就是被觀察者,客戶端就是觀察者。

    查看全部
  • ## 策略模式

    #### 定義

    將一組特定的行為和算法封裝成類,以適應特定的上下文環境,這種模式就是策略模式


    #### 實際應用舉例


    假如一個電商網站系統,針對男性女性用戶要各自跳轉到不同的商品類目,并且所有廣告位展示不同的廣告。


    假設需要增加一個推薦位,之后再要求增加一個vip策略


    傳統模式:


    ```php


    class Page{


    public $strategy;? //策略類型


    public function index()

    {

    $femaleClass = new Core\FemaleUserStrategy();

    $maleClass = new Core\maleUserStrategy();

    $vipClass = new Core\vipUserStrategy();

    echo 'AD'.'<br/>';

    $sex = isset($_GET['sex']) ? trim($_GET['sex']) : '';

    if( $sex =='female' ){

    $femaleClass->showAD();

    } else if( $sex == 'vip' ){

    $vipClass->showAD();

    } else {

    $maleClass->showAD();

    }


    echo '<br/>';

    echo 'Cateogry'.'<br/>';

    if( $sex =='female' ){

    $femaleClass->showCategory();

    } else if( $sex == 'vip' ){

    $vipClass->showCategory();

    } else {

    $maleClass->showCategory();

    }


    echo 'posid'.'<br/>';

    if( $sex =='female' ){

    $femaleClass->showPosid();

    } else if( $sex == 'vip' ){

    $vipClass->showPosid();

    } else {

    $maleClass->showPosid();

    }



    }



    }



    $data = new Page();

    $sex = isset($_GET['sex']) ? trim($_GET['sex']) : '';

    $data->index();

    ```


    如果使用策略模式的話


    ```php

    class Page{


    public $strategy;? //策略類型


    public function index()

    {

    echo 'AD'.'<br/>';

    $this->strategy->showAD();

    echo '<br/>';


    echo 'Cateogry'.'<br/>';

    $this->strategy->showCategory();

    echo '<br/>';


    echo 'posid'.'<br/>';

    $this->strategy->showPosid();

    }


    public function setStrategy($strategy)

    {

    $this->strategy = $strategy;

    }


    }



    $data = new Page();

    $sex = isset($_GET['sex']) ? trim($_GET['sex']) : '';

    if( $sex =='female' ){

    $strategy = new Core\FemaleUserStrategy();

    } elseif( $sex == 'vip' ){

    $strategy = new Core\vipUserStrategy();

    } else {

    $strategy = new Core\MaleUserStrategy();

    }

    $data->setStrategy($strategy);

    $data->index();

    ```


    #### 使用策略模式可以實現Ioc,依賴導致、控制反轉


    在寫Page類的時候,并不需要去定義好所依賴的類,里面沒有它的代碼,最終在代碼執行過程中,才將關系進行綁定,這種設計模式在我們面向對象的設計之中經常要用到這個,因為面向對象很重要的一個思路就是**解耦**。


    如果兩個類是互相依賴的關系,那么它們之間的關系就是**緊耦合**設計,使用策略模式進行一個依賴倒置之后,我們就可以很方便去替換其中一個類。


    查看全部
  • # 單例模式

    傳統模式:某個類new之后都是一個新的對象。

    如Database new 3遍之后:

    $db1?=?new?\Core\Database();
    $db2?=?new?\Core\Database();
    $db3?=?new?\Core\Database();
    var_dump($db1);
    var_dump($db2);
    var_dump($db3);

    output:

    object(Core\Database)#1?(0)?{}
    object(Core\Database)#2?(0)?{}
    object(Core\Database)#3?(0)?{}

    后面#的數字表示不同對象?

    單例模式:只創建一個對象,之后再需要使用的話使用同一個對象。(不允許new,然后使用一個新的方法來使用前一個對象)

    $db1?=?\Core\Database::getInstance();
    $db2?=?\Core\Database::getInstance();
    $db3?=?\Core\Database::getInstance();
    var_dump($db1);
    var_dump($db2);
    var_dump($db3);

    output:

    object(Core\Database)#1?(0)?{}
    object(Core\Database)#1?(0)?{}
    object(Core\Database)#1?(0)?{}


    查看全部
    0 采集 收起 來源:[php]單例模式

    2018-04-27

  • # 類自動加載

    - __autoload:一個項目依賴多個框架,會包函數重新聲明錯誤。

    - spl_autoload_register:php5.3之后針對__autoload的缺陷出來的函數。

    查看全部
    0 采集 收起 來源:類自動載入

    2018-04-27


  • ## 工廠模式

    傳統模式:每個類都需要去new一下,當類名和參數改變時就需要每個地方進行修改。

    工廠模式:當類名和參數改變時只需要去工廠類里面改變。


    查看全部
    0 采集 收起 來源:[php]工廠模式

    2018-04-27

  • # 3種基本設計模式:

    - 工廠模式:工廠方法或者類生成對象,而不是在代碼中直接new

    - 單例模式:使某個類的對象允許創建一個

    - 注冊模式:全局共享和交換對象

    查看全部
  • github有:

    https://github.com/adobe-fonts/source-code-pro


    查看全部
  • 策略模式

    查看全部
  • 通過ruturn $this來完成鏈式操作。

    ```php

    $this->where()->order()->select();

    ```

    查看全部
  • phpstorm下載地址

    查看全部

舉報

0/150
提交
取消
課程須知
要想更好的掌握本課課程的重點內容,那么熟知面向對象的相關知識是必不可少的。
老師告訴你能學到什么?
1、了解PHP的11種設計模式 2、掌握設計模式的編程實現 3、具備使用設計模式進行面向對象編程的能力

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!