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 回答