è perfettamente OK - ma nota che devi passare un oggetto che è un'istanza della classe, di indicare su quale oggetto il metodo non statico sarà chiamata:
class MyClass {
public function hello() {
echo "Hello, World!";
}
}
$a = new MyClass();
call_user_func(array($a, 'hello'));
È non dovrebbe usare qualcosa di simile:
call_user_func('MyClass::hello');
che vi darà il seguente avviso:
Strict standards: `call_user_func()` expects parameter 1 to be a valid callback,
non-static method `MyClass::hello()` should not be called statically
(Questo avrebbe funzionato perfettamente bene se il metodo è stato dichiarato come static ... ma non è, qui)
Per maggiori informazioni, si può dare un'occhiata alla sezione di callback del manuale, che afferma, tra le altre cose (citando):
un metodo di un oggetto istanziato è passato come un vettore contenente un oggetto di indice 0 e il nome del metodo di indice 1.
Se si ottiene un errore severo con PHP 5.2 e non con PHP 5.3, è probabilmente una questione di configurazione - Sto pensando alla direttiva error_reporting
.
noti che E_ALL
non include E_STRICT
(quoting):
E_ALL
: Tutti gli errori e le avvertenze, come sostenuto, ad eccezione del livello E_STRIC
T.
fonte
2010-04-14 19:31:53
Otterrete lo stesso avviso su PHP5.3. Sembra che la configurazione di php5.3 e php5.2 sia diversa. Dai un'occhiata a error_reporting'. – vooD