php常用設計模式

來源:互聯網
上載者:User

標籤:method   mys   狀態   ret   mysqli   gis   交通   策略模式   roo   

  • 單例模式 (確保一個類只執行個體化一次並且可以自行執行個體化)
  • 原廠模式 (替代了new操作)
  • 策略模式 (使用不同的方法來達到同樣的目的)
  • 觀察者模式 (一個對象發生變化時其他對象也會觸發相應的操作)
  • 適配器模式 (把不同的方法封裝成統一的方法)
  • 註冊模式 (把執行個體放進一個數組以供調用)

這些設計模式在常見的php架構:ThinkPHP, Yii2等都有用到.

/*  * 單例模式 * 確保此類只有一個執行個體並可以自行執行個體化 * 用在: 資料庫操作, 日誌對象 等. */class single{    public $db = NULL;    static $instance = null;    public function __construct() {                $this->db = new mysqli(‘127.0.0.1‘, ‘root‘, ‘root‘, ‘test‘);        if($this->db->connect_error){            die(‘connect error:‘ . $this->db->connect_error);        }        echo "mysql connect successful\n";    }    static public function  getInstance(){        if(!(self::$instance instanceof self)){            self::$instance = new self();            echo "aaa\n";        }        echo "bbb\n";        return self::$instance;    }    public function __destruct() {        $this->db->close();    }}single::getInstance();single::getInstance();//輸出:/*    mysql connect successful    aaa    bbb    bbb*/
/** * 原廠模式 * 用Factory 方法代替new操作的一種模式 */interface people{    public function say();}class man implements people{    public function say() {        echo "i am man \n";    }}class woman implements people{    public function say() {        echo "i am woman \n";    }}class factory{    public function createMan(){        return new man();    }    public function createWoman(){        return new woman();    }}$f = new factory();$f->createMan()->say();$f->createWoman()->say();//輸出/* i am man  i am woman  */
/** * 策略模式 [使用不同的方式達到同一個目的] * 情境:乘坐不同交通工具去公司上班 */abstract class tools{    abstract function working();}class bicyle extends tools{    public function working() {        echo __METHOD__ . "\n";    }}class car extends tools{    public function working() {        echo __METHOD__ . "\n";    }}class transport{    public function running($obj){        $obj->working();    }    /**     * 使用魔術方法也可以達到上述效果     * @param type $name     * @param type $arguments     */    public function __call($name, $arguments) {        $arguments[0]->$name();    }}$t = new transport();$t->running(new car());$t->running(new bicyle());$t->working(new car());//使用魔術方法也可以達到上述效果//輸出/*    car::working    bicyle::working    car::working  */
/*  * 觀察者模式 * 當一個對象狀態發生變化時,依賴它的對象全部收到觸發操作 * 發生情境:yii2的behavior,event */interface event{    function run();}class e1 implements event{    public function run() {        echo __METHOD__ . "\n";    }}class e2 implements event{    public function run() {        echo __METHOD__ . "\n";    }}class observer{    static $obs;        function addObs($name, $obj){        self::$obs[$name] = $obj;    }    function trigger(){        foreach (self::$obs as $val){            $val->run();        }    }}$o = new observer();$o->addObs(‘e1‘, new e1());$o->addObs(‘e2‘, new e2());$o->trigger();//輸出/* e1::run e2::run  */
/*  * 適配器模式 * 把不同的方法封裝成統一的方法以供調用 * 用在 資料庫 mysql, mysqli, pdo 等 */interface db{    public function connect();    public function query();    public function close();}class mysqlA implements db{    public $db;        public function connect(){        $this->db = mysqli_connect($host, $user, $password, $database, $port, $socket);    }    public function query(){    }    public function close(){        mysqli_close($this->db);    }}class mysqlB implements db{    public $db;        public function connect() {        $this->db = new PDO($dsn, $username, $password);    }        public function query(){    }        public function close(){        $this->db = null;    }}
/*  * 註冊模式 * 把已有對象放入一個數組裡以供調用 */class register{    static $objects;        public static function set($name, $obj){        self::$objects[$name] = $obj;    }    public static function get($name){        return self::$objects[$name];    }}class log{};register::set(‘log‘, new log());$log = register::get(‘log‘);

php常用設計模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.