談php設(shè)計(jì)模式介紹——偽對象模式(4)_PHP教程
推薦:解析php字符串處理函數(shù)addcslashes 為字符串里面的部分字符添加反斜線轉(zhuǎn)義字符 addslashes 用指定的方式對字符串里面的字符進(jìn)行轉(zhuǎn)義 bin2hex 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制表示 chr 返回一個字符的ASCII碼 chunk_split 按一定的字符長度將字符串分割成小塊 convert_cyr_string 將斯
更進(jìn)一步說,你能隨心所欲的設(shè)置何種方法被調(diào)用以及調(diào)用多少次。你甚至可以驗(yàn)證那些根本不該被調(diào)用的方法。
下面是一個擴(kuò)展型的測試,它用來建立和驗(yàn)證那些復(fù)雜的設(shè)計(jì)。
class PageDirectorTestCase extends UnitTestCase {
function testSomethingWhichUsesSession() {
$session =& new MockSession($this);
$session->setReturnValue(‘isValid’, true);
$session->setReturnValue(‘get’, 1);
$session->expectOnce(‘isValid’, array(‘user_id’));
$session->expectOnce(‘get’, array(‘user_id’));
$session->expectNever(‘set’);
// the actual code which uses $session
$session->tally();
}
}
使用偽對象的原因很多,方法也多樣化。但在我們繼續(xù)前,讓我們把另外的一些類加入進(jìn)來,使其來龍去脈更加清楚。
接下來的一部分是重構(gòu)已有腳本,創(chuàng)建一個用于檢查用戶是否有相應(yīng)權(quán)限的名為UserLogin的類。
class UserLogin {
var $_valid=true;
var $_id;
var $_name;
function UserLogin($name) { switch (strtolower($name)) { case ‘admin’:
$this->_id = 1;
$this->_name = ‘admin’;
break;
default:
trigger_error(“Bad user name ‘$name’”);
$this->_valid=false;
}
}
function name() {
if ($this->_valid) return $this->_name;
}
function Validate($user_name, $password) {
if (‘admin’ == strtolower($user_name)
&& ‘secret’ == $password) {
return true;
}
return false;
}
}
(在一個實(shí)際的程序中,你應(yīng)當(dāng)按照如上所示的邏輯來查詢相應(yīng)的數(shù)據(jù)表,這種小而且編寫起來費(fèi)神的類體現(xiàn)了你將如何運(yùn)用ServerStub來組織代碼———ServerStub是一個小型的表達(dá)你想法的類,但它只是在一些限制環(huán)境下可用。)
最后一部分是創(chuàng)建響應(yīng)。為了最終在瀏覽器中顯示,我們必須處理那不斷增長的HTML內(nèi)容,如果必要的話我們也會討論HTTP重定向。(你也可以執(zhí)行其他的http頭的操作——這樣說是為了能構(gòu)隱藏它——在一個成熟的做法中,但這里使用的是一段更簡單的代碼,是為了使例子容易理解與關(guān)注。)
class Response {
var $_head=’’;
var $_body=’’;
function addHead($content) {
$this->_head .= $content;
}
function addBody($content) {
$this->_body .= $content;
}
function display() {
echo $this->fetch();
}
function fetch() {
return ‘<html>’
.’<head>’.$this->_head.’</head>’
.’<body>’.$this->_body.’</body>’
.’</html>’;
}
function redirect($url, $exit=true) {
header(‘Location: ‘.$url);
if ($exit) exit;
}
}
給出了這些模塊后,也是時候?qū)⑦@些新開發(fā)的、已測試的組件聚合到一個頁面中了。讓我們寫一個最終的類來協(xié)調(diào)這個頁面的所以行為,取個合適的名字PageDirector。類PageDirector具有一個很簡單的運(yùn)用程序接口:你在實(shí)例化后可以用調(diào)用它的run()方法。
這個“bootstrap”文件運(yùn)行新程序時應(yīng)如下所示:
<?php
require_once ‘classes.inc.php’;
define(‘SELF’, ‘http://www.example.com/path/to/page.php’);
$page =& new PageDirector(new Session, new Response);
$page->run();
?>
該文件包含了所需的已定義類,并為自己定義了一個常量,給PageDirector類(其用于傳遞類Session 和類Response所依賴的實(shí)例來組成構(gòu)造函數(shù))創(chuàng)建了一個實(shí)例來執(zhí)行PageDirector::run()方法。
分享:怎樣把握技巧開發(fā)PHP網(wǎng)站1.使用 ip2long() 和 long2ip() 函數(shù)來把 IP 地址轉(zhuǎn)化成整型存儲到數(shù)據(jù)庫里。這種方法把存儲空間降到了接近四分之一(char(15) 的 15 個字節(jié)對整形的 4 個字節(jié)),計(jì)算一個特定的地址是不是在一個區(qū)段內(nèi)頁更簡單了,而且加快了搜索和排序的速度(雖然有時僅
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時間
- PHP中獎概率的抽獎算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-談php設(shè)計(jì)模式介紹——偽對象模式(4)
。