學習小筆記---大話PHP設計模式

PHPStorm IDE

開發字體選用:Source Code Pro , Courier New , Concolas



php命名空間 :可以解決 不同類中 相同名字方法的衝突

namespace test1;

function test(){


自動載入  :       

function  __autoload($class){

   require  __DIR__.'/'$class.'.php';

}


spl_autoload_register(); 這個函數,可以允許多個 autoload 必須現在頭一行

例如 :

spl_autoload_register('autoload1');

spl_autoload_register('autoload2');

function  autoload1($class){

   require  __DIR__.'/'$class.'.php';

}

function  autoload2($class){

   require  __DIR__.'/'$class.'.php';

}

require 以後 類名::方法名調用(); 

例如:Test1::test();Test2::test();


PSR-0規範


1 php的命名空間必須於絕對路徑一致

2 類名與文件名一致 的首字母必須大寫

3 除了路口文件外,其他".php"必須只有一個類不能有可執行代碼 例如:echo();

__DIR__       魔術常量 獲取當前文件的路徑

__FUNCTION__  魔術常量 獲取當前方法

__METHOD__    魔術常量 獲取當前類名和方法

BASEDIR       網站根目錄


spl 標準簡介


SplStack(); 先進後出  站式數據結構

$stack=new SplStack();

$stack->push("test1");   //先進 入站

$stack->push("test2");   //先進

echo $stack->pop();      //後出 出站 test2

echo  $stack->pop();     //後出      test1


SplQueue(); 先進先出  隊列式數據結構

$SplQueue=new SplQueue();

$SplQueue->enqueue("test1");   //先進

$SplQueue->enqueue("test2");   //先進

echo $SplQueue->dequeue();           //先出 test1

echo $SplQueue->dequeue();           //先出 test2


SplMinheap();   堆式數據結構

$SplMinheap=new SplMinheap();

$SplMinheap->insert('test1');

$SplMinheap->insert('test2');

echo $SplMinheap->extract();   test1

echo $SplMinheap->extract();   test2


$sqlFixedArray();    固定尺寸的數組 (固定長度)

$array= new $sqlFixedArray(10);(括號中設置數據長度)

$array['0']=1;

$array['8']=8;


PHP鏈試 操作的實現  好處就是可以用一行代碼來實現很多的功能


$ob->where()->order()->limit()->select();


PHP 面向對象高級特性


PHP 魔術方法的使用 

1 __get/__set               //將對象的首信進行接管

2 __call/__callStatic       //用來控制PHP的方法調用/控制類的靜態方法調用

3 __toString               //將一個PHP對象轉換成字符串

4 __invoke                 //將PHP當成函數來使用


打印出來的結果是 不管下標1-7有沒有值 都會打印出來 沒值的自動給個空值 



PHPstorm 配置安裝

http://blog.csdn.net/ikscher/article/details/43672365


三種 基本設計模式


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

好處 :就是萬一發生更改 只改一個工廠模式類就可以了


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

好處 :無論需要多少個實例對象 實際上只連接了數據庫一次


註冊模式 : 全局共享交換對象  與工廠模式配合更好

好處 :全局共享交換對象


註冊樹與工廠模式共同試用 可以減少 對內存資源的浪費。因爲調用的是同一個對象。還可以添加數據對


象映射模式 減少對數據庫的直接操作 操作的是類庫的屬性


適配器模式 


讓不同的接口封裝成統一的API

PHP 類是單繼承,也就是不支持多繼承,當一個類需要多個類的功能時,繼承就無能爲力了,爲此 PHP 引


入了類的接口技術。


如果一個抽象類裏面的所有方法都是抽象方法,且沒有聲明變量,而且接口裏面所有的成員都是 public 


權限的,那麼這種特殊的抽象類就叫 接口 。

 

接口使用關鍵字 interface 來定義,並使用關鍵字 implements 來實現接口中的方法,且必須完全實現。 

 

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


例如判斷用戶的男女給予不同的需求 

先寫出 男的需求 然後再寫出女的需求 

根據傳輸的值 決定調用那個需求 而不再用繁瑣的判斷來實現 更改的話只要再寫一種需求就好了


數據對象影射模式 

1 數據對象映射模式,是將對象和數據存儲映射起來,對一個對象的操作會映射爲對數據儲存的操作


觀察者模式 當一個對象狀態發生改變時,依賴它的對象會全部接到通知 並自動更新 用處 當一個事件發


生的時候 與其關聯的都可以寫在觀察者類裏


原型模式 與工廠模式作用類似,都是用來創建對象的

與工廠模式的實現不同,原型模式是事先創建好一個原型對象,然後通過clone原型對象來創建新的對象。


這樣就免去了類創建時的初始化操作

原型模式適用於大對象的創建。創建一個大對象需要很大的開銷,如果每次new就會消耗很大,原型模式僅


需內存拷貝即可。

用處:比如建立的一個類對象中涉及到很多循環之類的 在new了以後 下次調用的時候 直接克隆這個對象 


而不是繼續new


裝飾器模式 裝飾器模式(Decorator),可以動態的添加修改類的功能 一個類提供了一項功能,如果在修改


並添加了額外的功能,傳統的編輯模式,需要寫一個子類繼承它,並重新實現類的方法

使用裝飾器模式,僅需在運行時添加一個裝飾器對象即可實現,可以實現最大的靈活性。


迭代器模式 在不需要了解內部實現的前提下,遍歷一個聚合對象的內部元素 

相比於傳統編程模式,迭代器模式可以隱藏遍歷元素的所需要的操作

<?php

namespace test;

class AllUser implements \Iterator {//調用迭代器接口 由PHP本身提供的


     protected $ids;

     protected $data = array();

     protected $num  ;


    function __construct(){

        //實例化模型

        //讀取數據庫


    }

    function valid(){//驗證當前是否還有下一個元素


    }

    function next(){//獲取下一個元素


    }

    function current(){ //獲取當前的元素


    }

    function rewind(){//重置整個迭代器


    }

    function key(){//獲取迭代器中的位置


    }




代理模式 

在客戶端與實體之間建立一個代理對象(proxy),客戶端對實體進行操作全部委派給代理對象,隱藏實體


的具體實現細節

proxy還可以與業務代碼分離,部署到另外的服務器,業務代碼中通過RPC來委派任務。



404界面

http://www.html5cn.org/article-8131-1.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章