如何在PHP中链式调用方法?

23

jQuery 允许我链式调用方法。我也记得在 PHP 中看到过同样的功能,所以我写了这个:

class cat {
 function meow() {
 echo "meow!";
 }

function purr() {
 echo "purr!";
 }
}

$kitty = new cat;

$kitty->meow()->purr();

我无法让链条正常工作,它在喵声后立即生成致命错误。


2
例子中的小猫更具有说明性;-) - sumid
4个回答

41
回答你关于猫的例子,你的猫类方法需要返回$this,即当前对象实例。这样你就可以链接你的方法:
class cat {
 function meow() {
  echo "meow!";
  return $this;
 }

 function purr() {
  echo "purr!";
  return $this;
 }
}

现在你可以这样做:

$kitty = new cat;
$kitty->meow()->purr();

这里有一篇非常有用的文章,介绍了这个主题:http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html


1
文章已经失效。这里是最后一个有效的存档 - Majid Fouladpour

7
将以下内容放置在您希望使之“可链接”的每个方法的末尾:
return $this;

4

只需从您的方法中返回$this,即对象本身(的引用):

class Foo()
{
  function f()
  {
    // ...
    return $this;
  }
}

现在您可以自由地进行链式操作了:
$x = new Foo;
$x->f()->f()->f();

2

使用 PHP 5,您可以从方法中返回对象。因此,通过返回指向当前对象的 $this,您可以实现方法链。


为什么这个被踩了?和其他答案一样的回答... - Justin E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接