2

最初のメソッドが静的関数である場合、チェーンをメソッド化する方法があるかどうか疑問に思っていました。これが私が意味することです:

    class foo
    {
        public static function a()
        {
            $foo = new foo;
            return $foo->bar(); 
        }

        public function bar()
        {
            return $this;
        }

        public function b()
        {
            return 1;
        }
    }

    print foo::a()->b();

編集し print foo::a()->b();ないprint foo:a()->b();

4

3 に答える 3

1

静的メソッドまたはその他のメソッド。メソッドが自分自身またはその他のオブジェクトを返す限り、メソッドは、試行しているのと同じメソッドで連鎖させることができます。

class foo {
   public function __construct() {
   }
   public function create() {
       // create something;
       return $this;
   }
   public function performSomethingElse() {
      // perform something
      return $this;
   }
}
$object = new foo;

$object -> create() -> performSomethingElse();
于 2011-06-22T06:08:24.063 に答える
0

この行

print foo:a();

する必要があります

print foo::a();

$this最初にインスタンス化する必要がある静的メソッドで返すことはできません。

$foo = new Foo();
print $foo->a()->b();
于 2011-06-22T05:38:26.677 に答える
0

一種の答えであり、やや特異です:しかし、代わりにファクトリプロシージャ
を 伴うオブジェクトを用意することをお勧めします:

 class foo { .... }

 function foo() { return new foo; }

これにより、混乱の一部が解消される場合があります。さらに、静的メソッド呼び出しとオブジェクト メソッド呼び出しの混在を避けることで、見た目が少し良くなります。

 foo()->bar()->b();

基本的に静的関数を外部化します。オブジェクトは、$this または実際の結果を返す連鎖可能なメソッドのみを実装します。

于 2011-06-22T05:54:53.457 に答える