Можно ли вызвать нестатические методы с помощью 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 или предупреждение удалено?

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

 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, а не с PHP 5.3, это, вероятно, вопрос конфигурации – я думаю о директиве error_reporting .

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

E_ALL : все ошибки и предупреждения, поддерживаемые, за исключением уровня E_STRIC T.