Если вы хотите получить желаемый результат по оси Y, используйте нечто похожее на это:
Мне нравится решение, предоставленное Camilo выше, по существу начиная со всего, что Вы делаете, изменяет значение статического участника, и так как Вы действительно хотите объединить в цепочку (даже при том, что это - только синтетический сахар), затем инстанцирование TestClass является, вероятно, лучшим способом пойти.
Я предложил бы Шаблон "одиночка", если Вы хотите ограничить инстанцирование класса:
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();