Es perfectamente bien - pero tenga en cuenta que usted tiene que pasar un objeto que es una instancia de su clase, para indicar en qué objeto el método no estático será llamada:
class MyClass {
public function hello() {
echo "Hello, World!";
}
}
$a = new MyClass();
call_user_func(array($a, 'hello'));
Usted no debe usar algo como esto:
call_user_func('MyClass::hello');
que le dará la siguiente advertencia:
Strict standards: `call_user_func()` expects parameter 1 to be a valid callback,
non-static method `MyClass::hello()` should not be called statically
(Esto funcionaría perfectamente bien si el método se declara como estática ... pero no lo es, aquí)
Para más información, se puede echar un vistazo a la sección callback del manual, que establece, entre otras cosas (donde se cita):
un método de un objeto instanciado se pasado como una matriz que contiene un objeto en el índice 0 y el nombre del método en el índice 1.
Si se obtiene un error estricta con PHP 5.2 y no con PHP 5.3, es probable que sea una cuestión de configuración - Estoy pensando en la directiva error_reporting
.
Tenga en cuenta que no incluye E_ALL
E_STRICT
(quoting):
E_ALL
: Todos los errores y advertencias, como soportados, excepto de nivel E_STRIC
T.
Obtendrá la misma advertencia en PHP5.3. Parece que su configuración php5.3 y php5.2 son diferentes. Eche un vistazo a 'error_reporting'. – vooD