Когда я использую 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.