2013-09-26 65 views
0

我正在尋找一些php代碼,並且我看到了一個將在同一行中調用多個方法的對象。如何在一行中調用另一種方法後的方法

我試着去了解如何去做,爲什麼我們需要使用它?

$object->foo("Text")->anotherFoo()->bar("Aloha") 

這種造型叫什麼?什麼是在PHP應用程序中使用它的最佳方式。

+0

閱讀本文http://stackoverflow.com/questions/3724112/php-method-chaining – Aris

回答

5

這種語法被稱爲method chaining,這是可能的,因爲每個方法返回對象本身($this)。這並不總是這種情況,它也用於檢索對象的屬性,該對象的屬性又可以是對象(可以具有屬於對象的屬性,等等)。

它用於減少需要編寫代碼的行數。比較這兩個片段:

沒有鏈接

$object->foo("Text"); 
$object->anotherFoo(); 
$object->->bar("Aloha"); 

使用方法鏈式

$object->foo("Text")->anotherFoo()->bar("Aloha"); 
+0

如果一個方法說'返回'假'。這仍然有效嗎? – Aris

+0

@Aris然後,你應該得到一個錯誤,這實際上是正確的,因爲它會寫'false-> method();' – silkfire

+0

所以這是什麼時候有效?方法必須返回$ this?或者是否有一個在PHP中的隱式規則,它返回對象本身? – Aris

0

當第一函數返回將包含所述第二函數,將一個對象,這是使用返回另一個對象等...

class X 
{ 

    public function A() 
    { 
     echo "A"; 
    } 
    public function B() 
    { 
     echo "B"; 
    } 

} 
class Y 
{ 

    public function A() 
    { 
     echo "Y"; 
    } 
    public function B() 
    { 
     return $this; 
    } 

} 

$y = new Y(); 
$y->B()->A();//this will run 

$x = new X(); 
$x->A()->B();//this won't run, it will output "A" but then A->B(); is not valid 
相關問題