A volte ho bisogno di eseguire il metodo grandparent (cioè bypassare il metodo genitore), so che questo è odore di codice, ma a volte non riesco a cambiare le altre classi (framework, librerie, ecc.).Come chiamare il metodo grandparent senza ottenere l'errore E_STRICT?
In PHP possiamo farlo con qualcosa di simile:
call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));
Il problema è che se si dispone di errori E_STRICT attivato si otterrà un errore del tipo:
norme severe: metodo non statico GrandParent :: grandParentMethod() non dovrebbe essere chiamato staticamente in ...
Ho trovato solo una soluzione per questo (senza rimuovere E_STRICT), ed è solo aggiungendo il @
a s aggiustare l'errore.
Ma questo è davvero brutto, qualcuno conosce una soluzione migliore?
Grazie! PS: Non riesco a un'istanza di un nuovo oggetto del tipo:
$grandparent = get_parent_class(get_parent_class($son));
$gp= new $grandparent;
$gp->grandParentMethod
perché ho bisogno di chiamare il mio metodo nonni nel contesto di $ figlio.
Hey Enrique, sembra che la risposta di Krinkle sia più adatta e più chiara. Inoltre, non richiede che tu imposti l'accesso pubblico alla classe nonna per accedervi dalla classe nipote ... se sei d'accordo, potresti cambiare risposta accettata alla risposta di Krinkle? – a20