2013-05-06 129 views
0

爲了處理到字符串的轉換,魔術方法__toString()存在於php中。但是,如果我有一個實例化的對象,如:如何處理一個if語句內的實例化對象?

$myObj = new Object(); 
$myObj->doSomeThings(); 

if ($myObj) { 
    // Some stuff to do here 
} 

我怎麼能告訴PHP而在if條件評估$ MyObj中做什麼?

主要的原因我很好奇的是,我想有也將直接在if語句條件計算一個可鏈接的方法。

if ($myObj->chainMethodA($var)->chainMethodA($var2)->chainMethodB($var)) { 

鑑於所有這些方法做:

return $this; 

我該如何處理基於類屬性的對象的布爾評價,如:

$this->switch = true; 

我知道我總是可以做這個

if ($myObj->chainMethodA($var)->chainMethodA($var2)->chainMethodB($var)->switch) { 

但我寧願自動處理。

+0

爲什麼不能創建自己的getter函數,像'功能getSwitch(){$返回這 - >開關; }'? – elclanrs 2013-05-06 23:39:55

+0

我敢打賭,我在這裏錯了,但不能只是重寫該對象中的__toString方法嗎? – 2013-05-06 23:40:02

+0

@BrianGraham是的,但是這樣的方法甚至會在if語句中被調用嗎? – JRL 2013-05-06 23:41:34

回答

0

這是一個代碼首選項。

如果您正在使用方法鏈接,則可以在您獲取時鏈接到循環中。這起源於醜陋的IF語句,但工作正常。

另一種方式來做到這一點是調用每一個方法,然後檢查開關(使用上沒有一個getter)。如果你能

$myObj = new Object(); 
$myObj->doSomeThings(); 
$myObj->chainMethodA($var)->chainMethodA($var2)->chainMethodB($var); 

爲:

if($myObj->switch){ 
... 
} 

if($myObj->switchState()){ 
.. 
} 

不過,我sugest是包裹在另一個布爾方法的功能

所以你有這樣的,或其他班級,所以你所要做的就是:

$myObj = new Object(); 
if($myObj->doAlotOfThings($var1,$var2)){ 

}