2013-09-26 105 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 
相关问题