可能重复:
如何在 PHP5 中构建多 oop 函数
嘿,
我在几个论坛系统中看到过这种代码,但我找不到任何这样的例子:
$this->function()->anotherfunction();
您可以在 PDO 中看到类似的示例:
$pdo->query($sqlQuery)->fetch();
我不知道如何在 PHP 中调用这种类型的编码,因此我无法继续寻找任何教程和示例。
可能重复:
如何在 PHP5 中构建多 oop 函数
嘿,
我在几个论坛系统中看到过这种代码,但我找不到任何这样的例子:
$this->function()->anotherfunction();
您可以在 PDO 中看到类似的示例:
$pdo->query($sqlQuery)->fetch();
我不知道如何在 PHP 中调用这种类型的编码,因此我无法继续寻找任何教程和示例。
这称为方法链。一个例子如下。请注意,我们正在返回当前对象。
class Example
{
function test1($var)
{
return $this;
}
function test2($var)
{
return $this;
}
}
$obj = new Example();
$obj->test1('Var')->test2(543)->test1(true);
您只需确保可链接的方法返回一个对象引用,并且您可以将另一个方法调用链接到结果上。
您可以return $this
如@Tim Cooper 所示,也可以返回对另一个不同对象的引用:
class Hand
{
protected $numFingers = 5;
public function countFingers() { return $this->numFingers; }
}
class Arm
{
protected $hand;
public function getHand() { return $this->hand; }
}
$n = $body->getLeftArm() // returns object of type Arm
->getHand() // returns object of type Hand
->countFingers(); // returns integer
您展示的 PDO 示例使用两种不同的对象类型。 PDO::query()
实例化并返回一个PDOStatement
对象,该对象又具有一个fetch()
方法。
这种技术也可以用于流畅的接口,特别是在为特定领域的语言实现接口时。不过,并非所有方法链都是流畅的接口。
看看 Martin Fowler在 2005 年写的关于流畅界面的文章。他引用了以领域驱动设计闻名的 Eric Evans 提出了这个想法。