2

PHP5 の OOP について質問があります。次のように記述されたコードがますます増えています。

$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));

しかし、このメソッドを作成する方法がわかりません。誰かがここで私を助けてくれることを願っています:0)どうもありがとう。

4

2 に答える 2

8

独自のクラス内でそのようなメソッドをチェーンするための鍵は、オブジェクトを返すことです (ほとんどの場合$this)。これは、次のメソッド呼び出しのオブジェクトとして使用されます。

そのようです:

class example
{
    public function a_function()
    {
         return $this;
    }

    public function first($some_array)
    {
         // do some stuff with $some_array, then...
         return $this;
    }
    public function second($some_other_array)
    {
         // do some stuff
         return $this;
    }
}

$obj = new example();
$obj->a_function()->first(array('str', 'str', 'str'))->second(array(1, 2, 3, 4, 5));

以外のオブジェクトを返すことも可能$thisであり、上記の連鎖は実際には単に を短くしたものであり$a = $obj->first(...); $b = $a->second(...);、呼び出し後に二度と使用しない変数を設定することの醜さを除けば、注意してください。

于 2010-07-21T11:31:47.517 に答える
0
$object->function()->first(array('str','str','str'))->secound(array(1,2,3,4,5));

これは厳密には有効な PHP ではありませんが、これが言っていることは... $object クラスでメソッドを呼び出しています。そのメソッド自体が、呼び出しているオブジェクトを返すオブジェクトを呼び出しています。呼び出されたメソッドは、呼び出してfirst()いるオブジェクトも返します。と呼ばれる方法second()

したがって、これは必ずしも 1 つのメソッドを持つ 1 つのクラスだけではありません (そうである可能性もあります) 。

何かのようなもの:

class AnotherClass {
    public function AnotherClassMethod() {
        return 'Hello World';
    }
}

class MyClass {
    public function MyClassMethod() {
        return new AnotherClass();
    }
}

$object = new MyClass();
echo $object->MyClassMethod()->AnotherClassMethod();  // Hello World
于 2010-07-21T11:48:28.643 に答える