Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP关于参考_Php_Oop - Fatal编程技术网

PHP OOP关于参考

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()-&

请举例说明$obj->$a()->$b是什么意思?我已经使用PHP OOP很长时间了,并且在一些地方看到了这种结构,而不仅仅是$obj->$a();在什么情况下我应该使用它

$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)。这不是方法链接,而是元编程。当您将这些调用移动到运行时时,在此处使用变量作为对象和方法名称会使调试变得更加困难。我不能说这个决定是否好,因为代码没有在上下文中给出。我同意方法链接是好的。不过,我确实认为,我们无法判断这段代码是否合理,这是一个很好的指标。这太聪明了。