Можно ли вызвать нестатические методы с помощью call_user_func в PHP 5.3?

Когда я использую call_user_func для нестатического метода в PHP 5.2, я получаю строковое предупреждение:

Strict Standards: Non-static method User::register() cannot be called statically

Но на PHP 5.3.1 я не получаю это предупреждение. Это ошибка в PHP 5.3.1 или предупреждение удалено?

Ответ 1

Это нормально - но обратите внимание, что вам нужно передать объект, являющийся экземпляром вашего класса, чтобы указать, на каком объекте должен вызываться нестатический метод:

class MyClass {
    public function hello() {
        echo "Hello, World!";
    }
}

$a = new MyClass();
call_user_func(array($a, 'hello'));


Вы не должны использовать что-то вроде этого:

call_user_func('MyClass::hello');

Что даст вам следующее предупреждение:

Strict standards: 'call_user_func()' expects parameter 1 to be a valid callback,
non-static method 'MyClass::hello()' should not be called statically 

(Это было бы прекрасно, если бы метод был объявлен как статический... но это не так)


Для получения дополнительной информации вы можете взглянуть на раздел обратного вызова руководства, в котором, среди прочего, указано (цитирование):

Метод объекта-объекта передается как массив, содержащий объект с индексом 0 и имя метода в индексе 1.


Если вы получите строгую ошибку со старой версией PHP (например, 5.2), это, вероятно, вопрос конфигурации - я думаю о директиве error_reporting.

Обратите внимание, что E_ALL включает E_STRICT из PHP 5.4.0 (цитирование):