23

jQuery 让我链接方法。我还记得在 PHP 中看到过同样的情况,所以我写了这个:

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

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

$kitty = new cat;

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

我无法让链条工作。它在喵喵叫之后立即产生一个致命错误。

4

4 回答 4

41

要回答您的 cat 示例,您的 cat 方法需要 return $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

于 2011-09-25T23:59:25.373 回答
7

将以下内容放在您希望“可链接”的每个方法的末尾:

return $this;
于 2011-09-25T23:54:17.493 回答
4

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

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

现在您可以将内容链接起来:

$x = new Foo;
$x->f()->f()->f();
于 2011-09-25T23:55:03.513 回答
2

是的,使用 php 5,您可以从方法返回对象。所以通过返回$this(指向当前对象),就可以实现方法链

于 2014-04-20T16:52:07.030 回答