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

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

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

推薦:解析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)頁更簡單了,而且加快了搜索和排序的速度(雖然有時僅

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