所以我想知道当初始方法是静态函数时是否存在方法链的方法。这就是我的意思:
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();
答案 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或实际结果的可链接方法。