PHP方法链接

时间:2011-06-22 05:31:07

标签: php method-chaining

所以我想知道当初始方法是静态函数时是否存在方法链的方法。这就是我的意思:

    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();

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

这一行

print foo:a();

应该是

print foo::a();

并且您将无法在静态方法中返回$this 它需要首先实例化:

$foo = new Foo();
print $foo->a()->b();

答案 2 :(得分:0)

只有一种答案,有点特殊:
但我建议你的对象附带一个工厂程序

 class foo { .... }

 function foo() { return new foo; }

这可能会为您消除一些困惑。通过避免混合静态和对象方法调用,它甚至看起来更好一些:

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

它基本上将静态函数外部化。并且您的对象仅实现返回$ this或实际结果的可链接方法。