學習小筆記---大話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來委派任務。