2010-03-22 68 views
2

可以用例子来解释一下$ obj - > $ a() - > $ b是什么意思?我已经使用了PHP OOP相当长的时间,并且在一些地方看到了这个结构,而不仅仅是这个$ obj - > $ a();我应该在什么情况下使用它?PHP OOP关于参考

回答

2
$a = 'someMethod'; 
$b = 'someProperty'; 
$obj->$a()->$b; 

等于:

$obj->someMethod()->someProperty; 

了解更多关于variable variables

1

$ a是一个名称的方法。因此,如果$a = "myFunc",这相当于:

$obj->myFunc()->$b; 

$ B似乎是一个属性的引用。该方法自然会返回一个对象,因此,如果$b = "myProp",我们可以修改这是:

$obj->myFunc()->myprop; 

这是真的易懂的形式差。

+0

只需添加到这个答案,方法链是好的,如果你的类接口周到(见jQuery的)。这不是方法链接,而是元编程。 此处使用变量,对于对象和方法名称,会使调试更加困难,因为您已将这些调用移至运行时。 我不能说这个决定是否合适,因为代码没有在上下文中给出。 – 2010-03-22 10:59:14

+0

我同意方法链接很好。但我确实认为,我们无法确定这些代码是否合理的事实是一个很好的指标,事实并非如此。它试图太聪明。 – 2010-03-22 13:33:25

1

这意味着$a()返回一个对象,并且$b是对象$a()返回的成员。

这被称为方法链接当每个方法返回原始对象时,因此可以调用同一对象的各种方法,而无需在每次调用之前重复指定$obj->

+0

这绝对是这种情况,但如果$ a返回除$ obj以外的对象,则可能不会链接。 – 2010-03-22 01:13:03

+0

对,如果返回不同的对象,则不会链接。但通常当你看到这种语法时,它就是链条的一部分。否则,我会认为这是一个不好的做法。 – 2010-03-22 01:15:08

+0

非常感谢!在PHP5 OOP中学习了一个新的有用功能。 – Starmaster 2010-03-22 15:04:50

1

实际期限为流利接口,如说是返回原来的对象,继承人一个完整的例子类

Class Fluent { 
public $var1; 
public $var2; 

function setVar1($value) { 
    $this->var1 = $value; 
    return $this; 
} 

function setVar2($value) { 
    $this->var2 = $value; 
    return $this; 
} 

function getVars() { 
    echo $this->var1 . $this->var2; 
} 
} 

$fluent = new Fluent(); 
$fluent->setVar1("Foo")->setVar2("Bar")->getVars(); 

这显然会返回“FooBar的”。

HTH