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のメソッドが$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 に答える