我以前在脚本中看到过这些,但尝试在谷歌上查找,但似乎找不到任何关于它们的内容,尽管我敢打赌,如果你知道它们的名字,它们很容易找到。
它们是干什么用的?他们是否要加入两种方法?
$this->foo()->bar();
你如何制作它们?一个简单的小类答案以及描述会很酷
你为什么要做它们?简单的使用会很酷
我已经看到框架将它们用于以下形式:
Form::input('name','input', array())->outside('morestuff')
链接和详细信息会很棒。
这些只是带有函数/方法的对象。 它们只是以类似于"流畅"API 的方式构建的。 当您查看此行时:
$this->foo()->bar();
你正在看两个对象。 (这可能是也可能不是巧合的同一类型,甚至是相同的实例,具体取决于对象的设计方式。 第一个对象是:
$this
该对象上有一个名为 foo
的函数,您可以调用它:
$this->foo()
此函数返回一个对象,该对象具有一个名为 bar
的函数,也可以调用该函数:
$this->foo()->bar()
有时为了清楚起见,您可能希望提取一个解释变量,该变量在功能上是等价的:
$anotherObj = $this->foo();
$anotherObj->bar();
这只是为了方便起见,这是编码风格的问题。假设你想在一个对象上调用两个方法,那么在标准样式中,你会写如下的东西:
$this->foo();
$this->bar();
如果您希望将其写入单个指令,则可以foo
返回$this
,这将允许您编写$this->foo()->bar()
。当然,您可以想象foo
返回一些可以调用bar
的其他对象。
在第二种情况下,没有什么特别的,函数Form::input
返回一个对象,你调用方法。
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();