在PHP中,return self链接静态方法是不可能的。这限制了静态方法的使用,因为链接非常有用,您必须使用实例来链接方法。
有没有理由让PHP开发人员决定不允许返回self
?或者是否一般不能在OOP中返回self
?
答案 0 :(得分:3)
我不能给你一个理由为什么不支持语法本身。它几乎可以在PHP 5.3中运行:
class Foo
{
public static function A()
{
return __CLASS__;
}
public static function B() { }
}
$chain = Foo::A();
$chain::B();
如果PHP会解析Foo::A()::B()
,那么它会起作用。
答案 1 :(得分:2)
如果与你没有任何关系的人要求你放弃自己,让自己回到不存在的东西,你会感觉如何?
答案 2 :(得分:2)
你不能返回'self',因为我所知道的OOP语言不允许将类型作为类型返回(不知道如何改写)。但是,每个人都允许返回类型的实例。静态方法是类定义的一部分,只要应用程序运行,它就是可调用的。
在进行OOP时,你应该非常谨慎地使用static关键字,因为它很容易被滥用。如果要链接方法,则使用对象。当不需要任何状态时,静态方法应该仅使用 ,并且该函数只是处理输入并返回结果。
当链接时你必须维护状态,那就是你根本不使用静态类/方法(确实有一些情况但是那些是例外情况而不是这里的情况)。
答案 3 :(得分:2)
尝试return new static()
或return new self()
:
class Calculator
{
private static $_var = 0;
public static function startFrom($var)
{
self::$_var = $var;
return new static();
}
public static function add($var)
{
self::$_var += $var;
return new static();
}
public static function sub($var)
{
self::$_var -= $var;
return new static();
}
public static function get()
{
return self::$_var;
}
}
这可以用于链式静态方法:
echo Calculator::startFrom(10)
->add(5)
->sub(10)
->get(); // return 5