日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

談php設(shè)計(jì)模式介紹——偽對(duì)象模式(6)_PHP教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:解析php字符串處理函數(shù)
addcslashes 為字符串里面的部分字符添加反斜線轉(zhuǎn)義字符 addslashes 用指定的方式對(duì)字符串里面的字符進(jìn)行轉(zhuǎn)義 bin2hex 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制表示 chr 返回一個(gè)字符的ASCII碼 chunk_split 按一定的字符長(zhǎng)度將字符串分割成小塊 convert_cyr_string 將斯

下面的代碼段演示了緩存輸出被重構(gòu)為runPage方法的結(jié)果,它給人的感覺(jué)就像是當(dāng)用戶登錄時(shí)另一個(gè)對(duì)輸出的測(cè)試。

class PageDirectorTestCase extends UnitTestCase {
// ...
function TestLoggedOutContent() {

$session =& new MockSession($this);

$session->setReturnValue(‘get’, null, array(‘user_name’));

$session->expectOnce(‘get’, array(‘user_name’));

$page =& new PageDirector($session, new Response);

$result = $this->runPage($page);

$this->assertNoUnwantedPattern(‘/secret.*content/i’, $result);

$this->assertWantedPattern(‘/<form.*<input[^>]*text[^>]*’

.’name.*<input[^>]*password[^>]*passwd/ims’

,$result);

$session->tally();

}

function TestLoggedInContent() {

$session =& new MockSession($this);

$session->setReturnValue(‘get’, ‘admin’, array(‘user_name’));

$session->expectAtLeastOnce(‘get’);

$page =& new PageDirector($session, new Response);

$result = $this->runPage($page);

$this->assertWantedPattern(‘/secret.*content/i’, $result);

$this->assertNoUnwantedPattern(‘/<form.*<input[^>]*text[^>]*’

.’name.*<input[^>]*password[^>]*passwd/ims’

,$result);

$session->tally();

}

function runPage(&$page) {

ob_start();

$page->run();

return ob_get_clean();

}

}

接下來(lái),將加入一個(gè)檢查條件到PageDirector::run()方法來(lái)看看用戶是否已經(jīng)登錄并決定顯示什么模板:

class PageDirector {

// ...

function run() {

if ($this->isLoggedIn()) {

$this->showPage(

new UserLogin($this->session->get(‘user_name’)));

} else {

$this->showLogin();

}

$this->response->display();

}

function showPage(&$user) {

$vars = array(

‘name’ => $user->name()

,’self’ => SELF

);

$this->response->addBodyTemplate(‘page.tpl’, $vars);

}

}

page.tpl看上去可能像這樣:

Welcome <?php echo $name; ?>
<br>Super secret member only content here.
<a href=”<?php echo $self; ?>?clear”>Logout</a>

此時(shí),MockSession扮演了ServerStub的角色來(lái)控制決定用戶是否登錄的條件。它的功能也類似評(píng)判者,決定這個(gè)信息是否通過(guò)如下兩個(gè)途徑被正確的使用:一個(gè)是明確地被預(yù)先定義并通過(guò)tally()被驗(yàn)證,另一個(gè)是不直接的生成正確的輸出,而是通過(guò)ServerStub返回的值來(lái)生成。

為了繼續(xù)重構(gòu)這段代碼,下一步要跳到前面的進(jìn)程。將要做兩個(gè)動(dòng)作:清除已經(jīng)登錄的用戶和驗(yàn)證登錄頁(yè)面提交的用戶名和密碼是否存在。

讓我們從注銷功能上開(kāi)始:

class PageDirectorTestCase extends UnitTestCase {

// ...

function TestClearLoginFunctionality() {

$_REQUEST[‘clear’] = null;

$session =& new MockSession($this);

$session->expectOnce(‘clear’, array(‘user_name’));

$session->setReturnValue(‘get’, null, array(‘user_name’));
$session->expectAtLeastOnce(‘get’);

$response = new MockResponse($this);

$response->expectOnce(‘redirect’, array(SELF));

$page =& new PageDirector($session, $response);

$this->assertEqual(‘’, $this->runPage($page));
$response->tally();

$session->tally();

unset($_REQUEST[‘clear’]);
}

}

在這段代碼中,response是個(gè)偽對(duì)象,然而,一旦在Response::redirect()方法中調(diào)用了exit(),腳本將會(huì)停止執(zhí)行。由于偽對(duì)象的存在,你可以核實(shí)方法是否被調(diào)用和方法傳回了什么參數(shù),且不會(huì)產(chǎn)生任何負(fù)面影響——如腳本停止——或被實(shí)際執(zhí)行。

分享:怎樣把握技巧開(kāi)發(fā)PHP網(wǎng)站
1.使用 ip2long() 和 long2ip() 函數(shù)來(lái)把 IP 地址轉(zhuǎn)化成整型存儲(chǔ)到數(shù)據(jù)庫(kù)里。這種方法把存儲(chǔ)空間降到了接近四分之一(char(15) 的 15 個(gè)字節(jié)對(duì)整形的 4 個(gè)字節(jié)),計(jì)算一個(gè)特定的地址是不是在一個(gè)區(qū)段內(nèi)頁(yè)更簡(jiǎn)單了,而且加快了搜索和排序的速度(雖然有時(shí)僅

來(lái)源:模板無(wú)憂//所屬分類:PHP教程/更新時(shí)間:2009-06-20
相關(guān)PHP教程