Ответ 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 (цитирование):