PHP OOP关于参考
请举例说明$obj->$a()->$b是什么意思?我已经使用PHP OOP很长时间了,并且在一些地方看到了这种结构,而不仅仅是$obj->$a();在什么情况下我应该使用它PHP OOP关于参考,php,oop,Php,Oop,请举例说明$obj->$a()->$b是什么意思?我已经使用PHP OOP很长时间了,并且在一些地方看到了这种结构,而不仅仅是$obj->$a();在什么情况下我应该使用它 $a = 'someMethod'; $b = 'someProperty'; $obj->$a()->$b; 等于: $obj->someMethod()->someProperty; 阅读有关$a是方法的名称。因此,如果$a=“myFunc”,这相当于: $obj->myFunc()-&
$a = 'someMethod';
$b = 'someProperty';
$obj->$a()->$b;
等于:
$obj->someMethod()->someProperty;
阅读有关$a是方法的名称。因此,如果
$a=“myFunc”
,这相当于:
$obj->myFunc()->$b;
$b似乎是对某个属性的引用。该方法似乎返回一个对象,因此,如果$b=“myProp”
,我们可以将其修改为:
$obj->myFunc()->myprop;
这是一种很难理解的形式。它意味着$a()
返回一个对象,$b
是$a()
返回的对象的成员
当每个方法返回原始对象时,这称为方法链接,因此可以调用同一对象的各种方法,而无需在每次调用之前重复指定$obj->
。实际术语是Fluent Interface,如上所述,它返回原始对象,下面是一个完整的示例类
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可能确实如此,但如果$a返回的对象不是$obj,则可能不是链接。对,如果返回的对象不同,则不是链接。但通常当你看到这个语法时,它是一个链的一部分。否则我会认为这是一个很差的练习,非常感谢!为我学习了PHP5 OOP中一个新的有用特性。为了补充这个答案,如果您的类接口考虑周到的话,方法链接是可以的(请参阅jQuery)。这不是方法链接,而是元编程。当您将这些调用移动到运行时时,在此处使用变量作为对象和方法名称会使调试变得更加困难。我不能说这个决定是否好,因为代码没有在上下文中给出。我同意方法链接是好的。不过,我确实认为,我们无法判断这段代码是否合理,这是一个很好的指标。这太聪明了。