3

私はいくつかのライブラリでこのようなものを見てきました:

$this->getResponse()->setRedirect($returnUrl);

この「マルチコール」はどのように行われますか、またはこのようなことを行うためにクラスをどのように構築する必要がありますか?

おもう :

class greeting
{
    public function hi()
    {
        public function howAreYou()
        {
            echo 'How are you?';
        }
    }
}
$greet = new greeting;
$greet->hi()->howAreYou();

しかし、それはあまり良くないと思います。extendsのようなものを使用したほうがよいでしょうが、わかりません。あなたの提案のためのThx。

4

5 に答える 5

4

これが自分自身を呼び出すクラス インスタンスである場合、「メソッド チェーン」と呼ばれます。

return $thisPHP では、 ;を使用して実行できます。これはクラスの継承とは非常に異なるメカニズムであることに注意してください。それらを交換可能として扱うことは実際には意味がありません。

参照: https://stackoverflow.com/search?q=method+chaining+php

于 2012-04-30T11:26:40.993 に答える
3

getResponse()メソッドを持つクラスインスタンスを返していますsetRedirect()

例:

class Foo
{
    public function getResponse()
    {
        $redirect = new Bar();
        return $redirect;
    }
}

class Bar
{
    public function setRedirect($returnUrl)
    {
        // do something
    }
}

$foo = new Foo();

$foo->getResponse()->setRedirect("returnUrl");
于 2012-04-30T11:26:27.187 に答える
2

いいえ。

各関数の最後で self を返すだけです。

だからあなたの例は次のようになります>

class greeting
{
    public function hi()
    {
        echo "Hi";

        return $this;
    }

    public function howAreYou()
    {
        echo 'How are you?';

        return $this;
    }
}

$greet = new greeting;
$greet->hi()->howAreYou();

あるいは:

$greet->hi()->howAreYou()->hi()->howAreYou();
于 2012-04-30T11:27:03.237 に答える
1

メソッドの連鎖は、メソッド内で関数を宣言することと同じではありません...実際、後者はエラーを吐き出します(関数宣言ではなく、呼び出し方です)。メソッドをチェーンするには、オブジェクト自体を返すようにします。

Class chainableObject
{
    public $name=null;
    public function __construct($name='')
    {
        $this->name=$name;
        return $this;
    }

    public function setName($name)
    {
        $this->name = $name;
        return $this;//makes chainable
    }

    public function greet()
    {
        echo 'Hello, '.$this->name;
        return $this;
    }
}

$chain = new chainableObject('Frank')->greet();//outputs: Hello, frank

説明: すべてのメソッドはインスタンス自体を返すため、基本的には、このアクションの戻り値で [create object with name:Frank]=>call method greeting のようにスニペットの最後の行を読み取ります。戻り値は$thisであるため、greet メソッドを持つオブジェクトです。これが起こることです...簡単です。詳細については、単に google php メソッド チェーンを参照してください。

于 2012-04-30T11:31:21.630 に答える
1
    class stutter{
      public function a(){
      echo 'h';
      return $this;
     }
      public function b(){
       echo 'hello world!';
     }
    }

$var=新しい吃音(); var->a()->b();

出力は次のとおりです。

ハローワールド

于 2012-04-30T11:31:42.733 に答える