为了账号安全,请及时绑定邮箱和手机立即绑定

大话PHP设计模式

Rango PHP开发工程师
难度中级
时长 3小时30分
学习人数
综合评分9.57
139人评价 查看评价
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下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!