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

Php 这些是做什么用的:$this->;foo()->;bar();你为什么要使用它们?你如何使用它们?,php,Php,我以前在脚本中看到过这些,但尝试过在谷歌上搜索,但似乎找不到任何关于它们的信息,尽管我打赌如果你知道它们的名字,它们很容易找到 它们是干什么用的?他们要加入两种方法吗 $this->foo()->bar(); 你是怎么做的?一个简单的小课堂答案和描述会很酷 你为什么要做它们?简单的使用会很酷 我见过框架将其用于以下表单: Form::input('name','input', array())->outside('morestuff') 链接和详细信息会很好。这只是为了方便

我以前在脚本中看到过这些,但尝试过在谷歌上搜索,但似乎找不到任何关于它们的信息,尽管我打赌如果你知道它们的名字,它们很容易找到

它们是干什么用的?他们要加入两种方法吗

$this->foo()->bar();
你是怎么做的?一个简单的小课堂答案和描述会很酷

你为什么要做它们?简单的使用会很酷

我见过框架将其用于以下表单:

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

链接和详细信息会很好。

这只是为了方便起见,这是一个编码风格的问题。假设您希望在一个对象上调用两个方法,那么在标准样式中,您将编写如下内容:

$this->foo();
$this->bar();
如果您喜欢在单个指令中编写它,那么您可以使
foo
返回
$this
,这将允许您编写
$this->foo()->bar()
。当然,您可以想象
foo
返回可以调用
bar
的其他对象

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

这些对象上只包含函数/方法。它们的构造方式很简单,就像一个“流畅”的API。当你看这一行时:

$this->foo()->bar();
你看到的是两个物体。(根据对象的设计方式,可能是相同类型的,也可能不是相同的实例。)第一个对象是:

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

$this->foo()
此函数返回一个对象,该对象有一个名为
bar
的函数,也可以调用该函数:

$this->foo()->bar()
有时为了清晰起见,您可能需要提取一个功能等效的解释变量:

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

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

这是否回答了您的所有问题:?它被称为“流畅接口”或“方法链接”-TLDR版本:每个方法都有
返回$this
,基本上。jQuery在JavaScript中执行此操作,Prope(ORM)在PHP中执行此操作,Spiderling(测试框架)也在PHP中执行此操作。可能有很多例子。这非常好,因为通常可以将IDE设置为在每个
->
引用上自动完成,这样就不用记住方法了。