是否可以使用静态类将静态方法链接在一起?说我想做这样的事情:
$value = TestClass::toValue(5)::add(3)::subtract(2)::add(8)::result();
。。。并且显然我希望将$ value分配给数字14。这可能吗?
更新 :它不起作用(您不能返回“自我”-它不是实例!),但这就是我的想法带给我的地方:
class TestClass { public static $currentValue; public static function toValue($value) { self::$currentValue = $value; } public static function add($value) { self::$currentValue = self::$currentValue + $value; return self; } public static function subtract($value) { self::$currentValue = self::$currentValue - $value; return self; } public static function result() { return self::$value; } }
解决了这些问题之后,我认为仅使用类实例而不是尝试链接静态函数调用(这似乎不太可能,除非可以对上述示例进行一些调整)才有意义。
我喜欢上面Camilo提供的解决方案,基本上是因为您要做的只是更改静态成员的值,并且因为您确实想要链接(即使它只是句法糖),所以实例化TestClass可能是最好的方法。
如果您想限制类的实例化,我建议使用Singleton模式:
class TestClass { public static $currentValue; private static $_instance = null; private function __construct () { } public static function getInstance () { if (self::$_instance === null) { self::$_instance = new self; } return self::$_instance; } public function toValue($value) { self::$currentValue = $value; return $this; } public function add($value) { self::$currentValue = self::$currentValue + $value; return $this; } public function subtract($value) { self::$currentValue = self::$currentValue - $value; return $this; } public function result() { return self::$currentValue; } } // Example Usage: $result = TestClass::getInstance () ->toValue(5) ->add(3) ->subtract(2) ->add(8) ->result();