关闭顶部展开顶部

《PHP设计模式介绍》第六章 伪对象模式(4)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:《PHP设计模式介绍》第五章 注册模式
我们通常认为避免使用全局变量是一种好的选择,因此,对象经常被作为参数从一段代码传递到另一段。但是传递实例的一个问题就是对象有时候不知道将要传递给谁——?经过一个函数后才被传

让我们从注销功能上开始:

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是个伪对象,然而,一旦在Response::redirect()方法中调用了exit(),脚本将会停止执行。由于伪对象的存在,你可以核实方法是否被调用和方法传回了什么参数,且不会产生任何负面影响——如脚本停止——或被实际执行。

下面是是一些帮助你认识测试功能的代码:


class PageDirector {
// ...
function run() {
$this->processLogin();
if ($this->isLoggedIn()) {
$this->showPage(
new UserLogin($this->session->get(‘user_name’)));
} else {
$this->showLogin();
}
$this->response->display();
}
function processLogin() {
if (array_key_exists(‘clear’, $_REQUEST)) {
$this->session->clear(‘user_name’);
$this->response->redirect(SELF);
}
}
}

最后是对登录表单的处理进行的测试。

class PageDirectorTestCase extends UnitTestCase {
// ...
function TestLoginFromRequest() {
$_REQUEST[‘name’] = ‘admin’;
$_REQUEST[‘passwd’] = ‘secret’;
$session =& new MockSession($this);
$session->expectOnce(‘set’, array(‘user_name’,’admin’));
$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[‘name’]);
unset($_REQUEST[‘passwd’]);
}
}


如下是实现上面测试所要求特性的代码:

class PageDirector {
// ...
function processLogin() {
if (array_key_exists(‘clear’, $_REQUEST)) {
$this->session->clear(‘user_name’);
$this->response->redirect(SELF);
}
if (array_key_exists(‘name’, $_REQUEST)
&& array_key_exists(‘passwd’, $_REQUEST)
&& UserLogin::validate(
$_REQUEST[‘name’], $_REQUEST[‘passwd’])) {
$this->session->set(‘user_name’, $_REQUEST[‘name’]);
$this->response->redirect(SELF);
}
}
}


这段程序已经重构而且也有充分的测试,因此可以对其进行一些附加的重构来清除像主脚本访问Session类,查询不经UserLogin类认可的字段而去访问‘user_name’字段,及session被当成资源调用等的小毛病。

当$_REQUEST这个超级变量被封装为一个类似Session类的资源以便与伪对象的创建时,为何让代码访问它?这段 代码有很多问题:但它毕竟是某种人为的用来逐渐了解这些概念的例子,它是为此而被创造的所以你不必深究。

更为重要的是,你已经学会利用伪对象测试模式来分离代码,以及在测试中分离$_SESSION之类的资源和避免相互关联的对象(如包含在Response类中的exit())产生不希望的结果。


问题

使用伪对象来测试代码可以让你分离所开发的代码。你可以消除负面影响和潜在的问题,极大地减少你在整个测试工作中所花的时间。这是一个好消息,因为如果你花在测试上的时间越多,以后就会越省事,并且你也会希望测试不是只做一次,应该能够被重复进行。(译注:这句直译太别扭,所以加了些使其通顺的内容。)

在新重构的程序中仍然会有许多漏洞。比如$_REQUEST变量应该由一个类来封装以便于使用伪对象测试。又如 showLogin()方法的重新调用。再如所有那些addBody()方法的调用看起来是如此混乱。

这种编程风格的另一个缺点是你将无法使用任何所见即所得的HTML编辑工具,这是因为所有HTML代码都被包含在PHP的方法调用中了。为了避免这些限制,你可以加入一个简单的基于PHP的模板机制。你可以这样引入模板文件:

<form method=”post”>
Name:<input type=”text” name=”name”> Password:<input type=”password” name=”passwd”>
<input type=”submit” value=”Login”>
</form>

然后需要使用一个方法来调用它:

class Response {
// ...
/**
* adds a simple template mechanism to the response class
* @param string $template the path and name of the template file
* @return void
*/
function addBodyTemplate($template, $vars=array()) {
if (file_exists($template)) {
extract($vars);
ob_start();
include $template;
$this->_body .= ob_get_clean();
}
}
}

很明显的,世上没有最完美的模板引擎,但它确实使本章的示例代码精简整洁了。

在GoF中这种按任务进行分隔的概念是被鼓励的:

“分隔设计模式下对象被创建后,其子类的创建过程就可以不再关注了。”

分享:《PHP设计模式介绍》第四章 单件模式
几乎所有面向对象的程序中,总有一两个资源被创建出来,在程序应用中持续被共享使用。例如,这样的一个资源,在一个电子商务程序的数据库连接中使用:这个连接在应用程序启动时初始化,程序于是

共4页上一页1234下一页
来源:模板无忧//所属分类:PHP教程/更新时间:2008-08-22
loading.. 评论加载中....
相关PHP教程
闂傚倸鍊烽悞锕傛儑瑜版帒鏄ラ柛鏇ㄥ灠閸ㄥ倿姊洪鈧粔鐢稿磻閵堝鐓涢柛銉ㄥ煐缁舵稓绱撳鍡欏⒌闁哄本鐩崺鍕礃椤忎礁顫岄梻浣瑰▕閺€杈╂暜濡ゅ懎桅闁告洦鍨伴崡铏繆閵堝倸浜炬繛瀛樼矋閸庢娊鈥旈崘顔嘉ч煫鍥ㄦ礈鑲栭梻浣烘嚀閸ゆ牠骞忛敓锟�
婵犵數濮烽弫鎼佸磻濞戙埄鏁嬫い鎾跺枑閸欏繑銇勯幘鍗炵仼缁炬儳顭烽弻鐔兼倷椤掍胶浼囧┑鈩冨絻閻楁捇寮婚敓鐘茬<婵犻潧娲ㄩ妴濠冪節閳封偓閸曨厸濮囨繛锝呮搐閿曨亪骞婇悩娲绘晢濠㈣泛妫楁禍鐐節闂堟侗鍎愰柣鎾跺枛閺屾洝绠涙繝鍐╃彅闂佽绻戦悡锟犲蓟閻旂厧绀勯柕鍫濇椤忥拷
婵犵數濮烽弫鍛婃叏閻戝鈧倹绂掔€n亞鍔﹀銈嗗坊閸嬫捇鏌涢悢閿嬪仴闁糕斁鍋撳銈嗗笒鐎氬嘲螞閹寸姷纾奸弶鍫氭櫅娴犳粍銇勯幘鍐叉倯鐎垫澘瀚埀顒婄秵娴滄繈顢樻ィ鍐╃厽閹艰揪绲鹃崵鈧柣搴㈠嚬閸樼晫绮╅悢鐓庡耿婵炲棙鍔曟惔濠冪箾閹寸偞鐓g紒鑸靛哺瀵鏁愭径濠庢綂闂佸疇妗ㄩ懗鑸靛閸儲鈷戦柣鐔告緲濞堚晠鏌熼崙銈嗗
婵犵數濮烽弫鍛婃叏閻戝鈧倹绂掔€n亞鍔﹀銈嗗坊閸嬫捇鏌涢悢閿嬪仴闁糕斁鍋撳銈嗗笒鐎氬嘲螞閹寸姷纾奸弶鍫氭櫅娴犳粍銇勯幘鍐叉倯鐎垫澘瀚换婵嬪礋闂堟稒鍊梻鍌氬€峰ù鍥敋閺嶎厼鍨傞幖娣妼缁€瀣亜閹炬瀚呭鑸碘拻濞达絿鐡旈崵娆撴⒑鐢喚鍒板畝锝堝劵椤︽煡鎽堕悙瀵哥闁瑰瓨鐟ラ悘顏堟煕鐎n亶妯€闁哄被鍔戦幃銈夊磼濞戞﹩浼�
闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶宕濆▎鎾跺祦濠电姴鍟崕鐔兼煏婵炲灝鍔ら柛鏃撶畱椤啴濡堕崱妤冪懆闂佺ǹ锕ら幗婊堝极椤曗偓瀹曞ジ寮撮悙娈垮晣闂佽瀛╃粙鎺戠幓閸ф鍎楅柟鐑樻煛閸嬫挾鎲撮崟顒傤槰缂備浇顕ч悧鎾愁嚕椤愶箑绠荤紓浣股戝▍銏ゆ⒑鐠恒劌娅愰柟鍑ゆ嫹
闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶宕濆▎鎾跺祦濠电姴鍟崕鐔兼煏婵炲灝鍔ら柛鏃撶畱椤啴濡堕崱妤€娼戦梺绋款儐閹瑰洭寮诲☉姗嗘僵妞ゆ帒顦崜宕囩磽娓氬洤鏋涢柨鏇ㄤ邯瀵偊宕掗悙鑼槶閻熸粌绻橀幃锟犲箻缂佹ḿ鍘介柟鍏兼儗閸ㄥ啿鐣濆☉銏$厸闁告侗鍠氱粻鐐烘煙椤栨俺瀚伴柍璇查叄楠炲鎮╃喊澶岄棷婵犵數鍋為幐濠氭嚌妤e啯鏅濋柕澹偓閸嬫挸顫濋悙顒€顏�
闂傚倸鍊搁崐宄懊归崶顒€违闁逞屽墴閺屾稓鈧綆鍋呯亸浼存煏閸パ冾伃鐎殿喕绮欐俊姝岊槷婵℃彃鐗撳鐑樺濞嗗繒妲i梺闈╃秶缂嶄礁顕g拠娴嬫婵☆垶鏀遍弬鈧梻浣哥秺閸嬪﹥绂嶉悙鐑樺殑闁惧繐婀辩壕钘壝归敐澶嬫锭濠德ゅГ娣囧﹪鎮欓懜娈挎濡炪倖娲╃紞浣逛繆閹间礁鐓涘┑鐘插暞濞呮牗绻濋悽闈涗粶婵☆偅鐟╁畷褰掓偨閻㈢數鐣堕梺璺ㄥ枔婵敻鍩涢幋锔界厱婵犻潧妫楅鈺呮煃瑜滈崜娆撯€﹂悜鐣屽祦濠电姴娲ょ粻濠氭煠閸涘⿴鍟忔繛鑲╁枛濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢敃鈧悿顕€鏌eΔ鈧悧濠囧矗韫囨搩娓婚悗锝庝簼閹癸絿绱掗埀顒佺節閸屻倗鍞甸梺鍏兼倐濞佳勬叏閸儲鐓熼柟鍨缁夘噣鏌熼娆炬綈婵炵⒈浜獮蹇撶暆婵犲倸韦濠电姷鏁搁崑娑㈡儑娴兼潙纾归柡鍥ュ灪缁犳帡姊绘担鐟邦嚋缂佽鍊歌灋婵炲棙鍨归惌鍡涙煃瑜滈崜鐔奉潖濞差亜宸濆┑鐐寸閸ㄥ潡骞冭閹晠鎳犻浣诡啎闂備浇顫夋竟鍡樻櫠濡ゅ懎鐤鹃柟闂寸劍閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹
濠电姷鏁告慨鐑姐€傞挊澹╋綁宕ㄩ弶鎴濈€銈呯箰閻楀棛绮堥崼鐔虹瘈闂傚牊绋掗敍宥夋煟閺傛寧顥炲ǎ鍥э躬椤㈡稑顫濋浣糕偓顖炴煟鎼淬垺鐨戠紒顕呭灦婵$敻宕熼姘鳖啋闁诲酣娼ч幗婊堟偩濞差亝鐓熼幖娣灮閸熸煡鏌熼崙銈嗗
婵犵數濮烽弫鍛婃叏閻戝鈧倹绂掔€n亞鍔﹀銈嗗坊閸嬫捇鏌涢悢閿嬪仴闁糕斁鍋撳銈嗗笒鐎氬嘲螞閹寸姷纾奸弶鍫氭櫅娴犳粍銇勯幘鐐藉仮鐎规洖鐖兼俊鎼佸Ψ椤旇崵绌挎繝纰夌磿閸嬫垿宕愰弽顓炵闁煎鍊栧畷鏌ユ煕閹板吀绨撮柛瀣尭椤繈鎼归銈呮锭濠电儑绲藉ú銈夋晝椤忓牄鈧礁鈽夊Ο婊勬閸┾偓妞ゆ帊鐒﹀▍鐘绘煕濞嗗浚妲虹紒鈾€鍋撴俊鐐€ら崑鎺楀窗濡ゅ啠鍋撳鐐
濠电姷鏁告慨鐑姐€傞挊澹╋綁宕ㄩ弶鎴濈€銈呯箰閻楀棛绮堥崼鐔虹瘈闂傚牊绋掗敍宥夋煟閺傛寧顥為柟渚垮妼椤啰鎷犻煫顓烆棜闂佽姘﹂~澶娒洪敃鍌氱闁绘梻顑曢埀顑跨閳诲酣骞樺畷鍥舵Н闂備胶绮幐鍝ヨ姳閸洖纾婚柟鍓х帛閸嬨劑鏌涘☉姗堝姛闁告ɑ鎮傚娲礈閹绘帊绨肩紓浣筋嚙鐎氼剟鎮洪鐐╂斀闁绘ɑ鍓氶崯蹇涙煕閿濆骸鐏︽鐐茬箻閺佹捇鏁撻敓锟�
濠电姷鏁告慨鐑姐€傞挊澹╋綁宕ㄩ弶鎴濈€銈呯箰閻楀棛绮堥崼鐔虹瘈闂傚牊绋掗敍宥夋煟閺傛寧顥為柟渚垮妼椤啰鎷犻煫顓烆棜闂傚倷绀侀幖顐︽嚐椤栫偛绠犳慨妞诲亾鐎规洘妞介崺鈧い鎺嶉檷娴滄粓鏌熼崫鍕棞濞存粓绠栧铏光偓鍦閸ゆ瑩姊虹敮顔剧М闁绘侗鍣i獮瀣晝閳ь剛绮诲☉銏♀拻闁割偆鍠撻埊鏇熴亜閺傛寧顥㈡慨濠勭帛閹峰懘宕ㄦ繝鍐ㄥ壍闂佽瀛╃喊宥夊箖閸岀偟宓侀煫鍥ㄧ⊕閺呮悂鏌ㄩ悤鍌涘
濠电姷鏁告慨鐑姐€傞挊澹╋綁宕ㄩ弶鎴濈€銈呯箰閻楀棛绮堥崼鐔虹瘈闂傚牊绋掗敍宥夋煟閺傛寧顥為柟渚垮妼椤啰鎷犻煫顓烆棜闂佽姘﹂~澶娒洪埡鍐濞撴埃鍋撻柣娑卞枤閳ь剨缍嗘禍鏍绩娴犲鐓曟い鎰靛亜娴滄绱掗幉瀣
婵犵數濮烽弫鍛婃叏閻戝鈧倹绂掔€n亞鍔﹀銈嗗坊閸嬫捇鏌涢悢閿嬪仴闁糕斁鍋撳銈嗗笒鐎氬嘲螞閹寸姷纾奸弶鍫氭櫅娴犳粍銇勯幘鍐叉倯鐎垫澘瀚换婵嬪礋椤撶偛绠戦梻鍌氬€烽懗鍫曞箠閹剧粯鍋ら柕濞у嫬搴婇梺鍛婃处閸ㄥジ寮崒鐐村€垫繛鎴烆仾閼测晜宕查柛鈩兦滄禍婊堟煛瀹ュ海鍘涙繛鍫熸煥椤儻顦茬€殿喖澧庨幑銏犫攽鐎e墎绋忓銈嗘濡嫰顢旈敓锟�
闂傚倸鍊峰ù鍥敋瑜庨〃銉╁箹娴gǹ鍋嶅┑鐘诧工閻楀棛绮堥崼鐔虹瘈闂傚牊渚楅崕鎰版煕鐎n亶鍎旈柡宀€鍠栭獮鍡涙偋閸偅顥夐梻浣规た閸樹粙銆冮崨鏉戠厴闁硅揪闄勯崑鎰版煙缂佹ê绗氭繛鍫弮濮婄儤绺介崨濠冮敪缂傚倸绉撮敃顏勵嚕婵犳艾围濠㈣泛顑呭▓鐔兼⒑闂堟侗妲堕柛搴ㄤ憾閿濈偛顓兼径瀣ф嫼缂傚倷鐒﹀玻鎸庣珶閸曨厾纾界€广儱瀚ˇ锕傛煟閿濆懎妲婚柍璇查叄楠炴ḿ鈧稒蓱椤忕喖姊绘担鑺ョ《闁革綇绠撻獮蹇涙晸閿燂拷
UB闂傚倸鍊搁崐椋庣矆娴i潻鑰块弶鍫氭櫅閸ㄦ繃銇勯弽顐粶缂佲偓婢跺绻嗛柕鍫濇噺閸g晫鈧鎸风欢姘跺蓟濞戙垹唯闁靛繆鍓濋悵鏇㈡煟鎼淬垻顣茬€光偓閹间礁绠栨俊銈傚亾闁宠棄顦埢宥夋惞椤愩垻浼岄梺鎸庣箘閸嬨倝寮幘缁樻櫢闁跨噦鎷�
闂傚倸鍊搁崐宄懊归崶銊х彾闁割偆鍠嗘禒鍫㈢磼鐎n偒鍎ユ繛鍏肩墪閳规垿鎮╁畷鍥舵殹闂佺粯甯$粻鏍箖濡ゅ懏鍋ㄩ柣銏㈠仯閳ь剙锕弻娑氣偓锝庡亝瀹曞矂鏌e☉鍗炴珝鐎规洖缍婇、娆撳矗閵壯勶紡婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹
闂傚倸鍊峰ù鍥敋瑜庨〃銉╁传閵壯傜瑝閻庡箍鍎遍ˇ顖炲垂閸岀偞鐓曟繝闈涙椤忕敻鏌ら弶鎸庡仴闁哄本鐩慨鈧柕蹇曞У椤旓拷
闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鍨鹃幇浣圭稁缂傚倷鐒﹁摫闁告瑥绻愰—鍐偓锝庝簼閹癸絿绱掗埀顒佺節閸屻倗鍞甸柣鐘荤細濞咃綁鎮橀柆宥嗙厱婵°倓鑳堕。鑼磼缂佹ḿ娲寸€规洖宕灃闁逞屽墴椤㈡濮€閵堝棛鍘遍梺缁樺姇濡﹤危閸︻厾纾肩紓浣贯缚閵嗘帞绱掓潏銊ф噰闁诡喒鏅犲畷顐﹀礋椤愩垼鍘梻鍌氬€烽懗鑸电仚婵°倗濮寸换姗€鐛箛娑欐櫢闁跨噦鎷�
缂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸婂潡鏌ㄩ弴鐐测偓褰掑磻閿熺姵鐓ラ柡鍥╁仜閳ь剚鎮傚畷褰掑磼濞戞氨鐦堟繝鐢靛Т閸婃悂顢旈锝冧簻闁冲搫鎳忛弫閬嶆煏閸パ冾伃妤犵偞甯掗濂稿炊閼告晫婊呯磽閸屾瑧鍔嶇憸鏉垮暙閿曘垽鏌嗗鍛姦濡炪倖甯掗崐鍛婄椤栫偞鐓曞┑鐘插暟缁犳ḿ绱掓潏銊﹀碍妞ゎ偅绻冮敍鎰攽閸ャ劍鐝﹂梻鍌欐祰濞夋洟宕抽敃鍌氱闁跨噦鎷�
©2017 www.mb5u.com濠电姷鏁告慨鐑姐€傞挊澹╋綁宕ㄩ弶鎴濈€銈呯箰閻楀棛绮堥崼鐔虹瘈闂傚牊绋掗敍宥夋煟閺傛寧顥為柟渚垮妼椤啰鎷犻煫顓烆棜闂佽瀛╅鏍闯椤曗偓瀹曟娊鏁愭径濠勭暫闂佸啿鎼幊搴g不閻㈠憡鐓欓柣鎴炆戠亸顓㈡煟閿斿吋瀚�
闂傚倸鍊搁崐宄懊归崶顒€违闁逞屽墴閺屾稓鈧綆鍋呭畷宀勬煛瀹€鈧崰鏍€佸☉妯峰牚闁告劗鍋撳В澶嬩繆閻愵亜鈧垿宕曟繝姘闁跨噦鎷�&闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁嶉崟顒佹闂佸湱鍎ら崵锕€鈽夐姀鐘电潉闂佸壊鍋嗛崳銉ノ涢崨瀛樷拺閻犳亽鍔屽▍鎰版煙閸戙倖瀚�
QQ缂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾鐎殿喚鏁婚、妤呭焵椤掑嫧鈧棃宕橀钘夌檮婵犮垹鍘滈弲婊堟儎椤栫偛鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢敃鈧壕鍦磽娴h偂鎴濃枍閻樺厖绻嗛柕鍫濆€告禍鎯ь渻閵堝骸浜濈紒璇茬墦閵嗕礁鈻庨幋婵囩€抽梺鍛婎殘閸嬬偤顢欓崒娑楃箚闁绘劦浜滈埀顒佺墪椤繑绻濆顒€鍋嶉悷婊冪箻楠炲骞橀鑺ユ闂佽法鍣﹂幏锟�闂傚倸鍊搁崐鐑芥嚄閸洖鍌ㄧ憸鏃堝箖濡警娼╂い鎺戝€瑰▓鎯р攽椤斿浠滈柛瀣尰閵囧嫰濮€閿涘嫭鍣伴悗瑙勬礀瀹曨剝鐏冩繝鐢靛Т閸婂綊顢欓崒娑楃箚闁绘劦浜滈埀顒佺墪椤繑绻濆顒€鍋嶉悷婊冪箻楠炲骞橀鑺ユ闂佽法鍣﹂幏锟�婵犵數濮烽弫鎼佸磻濞戙垺鍋ら柕濞у啫鐏婇棅顐㈡处閹尖晛霉閺嶎厽鐓忓┑鐐茬仢閸撳墽鎲告惔鈽嗗殫闁告洦鍋嗛弳鍡涙煃瑜滈崜娑欑珶閺囩喆鍋呴柛鎰ㄦ櫇閸欏棝姊虹紒妯荤闁稿﹤婀遍埀顒佺啲閹凤拷闂傚倷娴囬褏鈧稈鏅犻、娆撳冀椤撶偟鐛ラ梺鍦劋椤ㄥ懐澹曟繝姘厵闁硅鍔曢崥褰掓煕濞嗘劖宕岄柡灞剧洴婵$兘骞嬪┑鍡樻濠电偛鐗嗘晶搴f閹捐纾兼慨妯诲閺嬪矂姊洪悷鏉挎闁瑰嚖鎷�闂傚倸鍊搁崐宄懊归崶顒佸剭妞ゆ劧绠戠粈瀣亜閹扳晛鐏╃悮姗€姊绘担绛嬪殭婵﹫绠撻敐鐐村緞鐎n剛顔曟繝鐢靛Т濞层劌鐣垫笟鈧弻鈥崇暤椤旂懓浜鹃梺鍓插亽娴滎亪寮诲☉銏犵労闁告劕銇樼欢闈涒攽閳藉棗浜鹃柟鍑ゆ嫹婵犵數濮烽弫鍛婃叏娴兼潙鍨傞柣鎾崇岸閺嬫牗绻涢幋鐐寸殤闁活厽鎹囬弻鐔虹磼閵忕姵鐏堥梺鍝勫閸庡弶绌辨繝鍥ч柛娑卞幗濞堝墎绱掓ィ鍐暫缂佺姵鐗犲濠氭偄鐞涒€充壕婵炴垶鐟$紓姘辩磼閻樺磭澧辩紒杈ㄥ笧閹风姾顦抽悗姘炬嫹闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢埛姘そ閺佸啴鍩€椤掆偓閻滃宕归瑙勭€婚梺瑙勫劤缁夋潙煤椤撱垹鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘...