嘿,
我见过这种代码在几个论坛系统,但我找不到任何像这样的例子:
$this->function()->anotherfunction();
你可以在P中看到一个类似的例子DO:
$pdo->query($sqlQuery)->fetch();
我不知道如何在PHP中调用这种类型的编码,因此我无法继续寻找任何教程和示例。
嘿,
我见过这种代码在几个论坛系统,但我找不到任何像这样的例子:
$this->function()->anotherfunction();
你可以在P中看到一个类似的例子DO:
$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库珀表示,也可以返回一个引用到另一个不同的对象:
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()
方法。
该技术也可以用于fluent interface,特别是在实现域特定语言的接口时。不过,并非所有的方法链都是流畅的界面。
请参阅2005年的Martin Fowler wrote about fluent interfaces。他引用了Eric Evans的Domain-Driven Design名气,因为他提出了这个想法。
感谢您分享这些宝贵的信息:) – tftd 2010-09-14 23:27:11