Я знаю, что это старо, но я думаю, что черты прекрасно справляются с этой проблемой, если вы используете PHP 5.4 +
. Сначала создайте черту, которая делает свойства вызываемыми:
trait CallableProperty {
public function __call($method, $args) {
if (property_exists($this, $method) && is_callable($this->$method)) {
return call_user_func_array($this->$method, $args);
}
}
}
Затем вы можете использовать эту черту в своих классах:
class CallableStdClass extends stdClass {
use CallableProperty;
}
Теперь вы можете определить свойства через анонимные функции и вызвать их напрямую:
$foo = new CallableStdClass();
$foo->add = function ($a, $b) { return $a + $b; };
$foo->add(2, 2); // 4