PHP Chain鏈式程式設計的應用之錯誤處理

2021-12-29 20:26:48 字數 1866 閱讀 8164

鏈式程式設計使用起來非常愜意,本文嘗試在php下實現一種鏈式程式設計的應用

我們知道在new class後呼叫method,在常規php程式設計下每次呼叫都要

php** 

$instance->method1();  

$instance->method1(); 

$instance->method1();

$instance->method1();

這樣無盡的寫n多,如果中間有錯誤判斷那就成這樣了

php** 

if($instance->method1())  

if($instance->method2())  

$instance->method3();  

//or  

$instance->method1();  

if($instance->haserror()) die(error);  

$instance->method2();  

if(....) ...; 

if($instance->method1())

if($instance->method2())

$instance->method3();

//or

$instance->method1();

if($instance->haserror()) die(error);

$instance->method2();

if(....) ...;

看上去很煩,寫起來更煩,特別是在開發期,那簡直是噩夢。

如果能保證這樣執行

php** 

if($instance->m0()->m1()->m2()->haserror()) die(error); 

if($instance->m0()->m1()->m2()->haserror()) die(error);

那就安逸了,實現這個,方法其實很簡單就是在這種可以鏈式進行的方法中包含錯誤判斷,無論如何都返回this, 當然類似haserror這樣的方法是不返回this的,這一類方法總是出現在最後,但是在開發期,我們在方法裡面複製貼上n多的

php** 

if($this->haserror())  

return $this 

//someting..  

return $this; 

if($this->haserror())

return $this

//someting..

return $this;

這樣也夠煩人的,當然如果定型了,那嵌入這些**也無所謂。開發期就煩死人了。

可以利用php的魔術方法來實現這個,這裡給出乙個基本的結構

php** 

class cchain  

public function __call($m,$a)   

public function __get($n)   

public function __set($n,$v)   

}  

class test   

public function seterror($v)   

public function m0()   

public function m1()   

public function m2($foo=null)   

/* someting without return*/ 

}  

}  

$test=new cchain(new test);  

print_r( $test->m0()->m1()->m2(1) );  

echo($test->error); 

iOS鏈式程式設計

nsinteger result adder.add 4 sub 1 mult 2 div 3 表示 4 1 2 3,是不是很方便很直觀。我們知道,如果是c 的實現話鏈式操作是很簡單的,因為c 的函式呼叫就是通過點操作呼叫的,只需要返回物件本身就可以實現鏈結了。但是oc就不行了,因為oc的點操作表示...

鏈式程式設計初試

鏈式程式設計思想 將多行操作通過 連線成一句 使 可讀性好,比如 a 1 b 2 c 3 代表性的就是masonry 鏈式程式設計特點 方法的返回值是block,block必有返回值 自身物件 block引數 操作物件 先簡單介紹下目前咱們已知的程式設計思想。1 面向過程 處理事情以過程為核心,一步...

pandas 鏈式程式設計

鏈式程式設計技術 usual non functional way df2 df.copy df2 k v functional assign way df2 df.assign k v 就地分配可能會比assign快,但是assign可以方便地進行鏈式程式設計 使用外括號,這樣便於新增換行符 r ...