https://github.com/yiisoft/yii/issues/2251#issuecomment-15336369
а вы говорите "он не оценит "
все в порядке, тут будет полное отрицание реальности
Я перестал понимать, о чем вообще речь.
PHP:
Class A{
function __construct(){
echo 123;
}
static function foo(){
echo '456';
}
}
call_user_func(array('A','foo'));
Это работает даже в 5.0. По моему и в 4-ке работало, но уже не помню. Но если там просто статический вызов, то
1) (new A)->foo() работать не будет
2) нахрена тогда вообще new A?
А вот если он не статический (нет кейворда static в объявлении метода), тут нюансы. Если нет метки static, все равно можно вызвать метод статически, и если в нем нет обращения к $this, все сработает.
PHP:
class A {
public function __construct() {
echo '123';
}
public function foo() { // no 'static' here
echo '456';
}
}
call_user_func(array('A','foo'));
Но это ненормально (ноги этого растут из php4) и это когда-нибудь должны исправить - запретить статический вызов нестатического метода еще на этапе компиляции (и - для конструкция вида call_user_func - в рантайме).
UPD: Это, кстати, приводит к JS-подобному $this scope - можно сделать вот такой вот WTF:
PHP:
class A {
public $x = '123';
public function foo() {
echo $this->x;
}
}
class B {
public $x = '456';
public function foo() {
A::foo();
}
}
$b = new B;
$b->foo();
Выведет 456 =)