这些是什么:$ this-> foo() - > bar();为什么要使用它们?你如何使用它们?

时间:2015-03-12 16:18:26

标签: php

我以前在脚本中看过这些,但是我们试过在谷歌上看,但似乎找不到任何东西,虽然我敢打赌,如果你知道他们的名字,他们很容易找到。

它们用于什么?他们要加入两种方法吗?

$this->foo()->bar();

你是如何制作它们的?一个小的简单类答案以及描述将很酷

你为什么要制作它们?一个简单的用途就是很酷

我见过框架将它们用于以下形式:

Form::input('name','input', array())->outside('morestuff')

链接和细节会很棒。

3 个答案:

答案 0 :(得分:2)

这些只是objects,上面有函数/方法。他们只是简单地构建,使他们像一个流利的" API。当你看这一行时:

$this->foo()->bar();

您正在查看两个对象。 (根据对象的设计方式,这可能是也可能不是同一类型,甚至是同一个实例。)第一个对象是:

$this

该对象在其上有一个名为foo的函数,您可以调用它:

$this->foo()

此函数返回一个对象,对象有一个名为bar的函数,也可以调用它:

$this->foo()->bar()

有时为了清楚起见,您可能需要提取一个解释变量,它在功能上是等价的:

$anotherObj = $this->foo();
$anotherObj->bar();

答案 1 :(得分:0)

这只是为了方便,它是编码风格的问题。假设您想要在对象上调用两个方法,那么在标准样式中,您可以编写如下内容:

$this->foo();
$this->bar();

如果您希望在单个指令中编写,则可以foo返回$this,这样您就可以编写$this->foo()->bar()。当然,您可以想象foo返回可以调用bar的其他对象。

在第二种情况下没有什么特别的,函数Form::input返回一个你调用方法的对象。

答案 2 :(得分:0)

php类可以使用语句return $this;返回自己,这允许你进行方法链接。

class MyClass{

    public function foo(){
         // ...
         return $this; // Return itself
    }

    public function bar(){
         // ...
         return $this; // Return itself
    }

    public function test(){
         $this->foo()->bar(); 
         //....
    }
}

课外:

$myClass = new MyClass();
$myClass->foo()->bar();

与此

完全相同
$myClass = new MyClass();
$myClass->foo();
$myClass->bar();