К сожалению, это (все еще) ограничение PHP, но имеет смысл, когда вы думаете об этом, поскольку класс может содержать свойства и методы, которые совместно используют имена. Например:
<?php
class Test {
public $log;
public function __construct() {
$this->log = function() {
echo 'In Test::log property';
};
}
public function log() {
echo 'In Test::log() method';
}
}
$test = new Test;
$test->log(); // In Test::log() method
call_user_func($test->log); // In Test::log property
?>
Если бы PHP разрешил нужный вам синтаксис, какая функция была бы вызвана? К сожалению, это оставляет нам только call_user_func[_array]()
(или копирование $this->log
в другую переменную и ее вызов).
Однако было бы неплохо, если бы следующий синтаксис был приемлемым:
<?php
{$test->log}();
?>
Но, увы, это не так.