PHP 方法链接

发布于 2024-11-16 17:10:35 字数 497 浏览 1 评论 0原文

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

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

So i was wondering if there is a way to method chain, when the initial method is a static function. Here is what I mean:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最舍不得你 2024-11-23 17:10:35

静态方法或其他方法,只要该方法返回一个对象,无论是自身还是其他方法,这些方法都可以链接起来,与您正在尝试的方法相同。

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

Static Methods or Other Methods, as long as the method is returning an object either self or some other, the methods can be chained, with the same method you are attempting.

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();
青衫负雪 2024-11-23 17:10:35

这行

print foo:a();

应该是

print foo::a();

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

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

this line

print foo:a();

should be

print foo::a();

and you will not be able to return $this in a static method
it needs to be instantiated first:

$foo = new Foo();
print $foo->a()->b();
寄居人 2024-11-23 17:10:35

只是一种答案,而且有些特殊:
但我建议您让您的对象附带一个工厂过程:

 class foo { .... }

 function foo() { return new foo; }

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

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

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

Only sort of an answer, and somewhat idiosyncratic:
But I would advise that you have your object accompanied by a factory procedure instead:

 class foo { .... }

 function foo() { return new foo; }

This might remove some of the confusion for you. And it even looks a bit nicer by avoiding the mix of static and object method calls:

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

It basically externalizes the static function. And your object only implements the chainable methods which return $this, or actual results.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文