A veces tengo que ejecutar el método de abuelos (es decir, eludir el método principal), sé que esto es código malicioso, pero a veces no puedo cambiar las otras clases (marcos, bibliotecas, etc.).Cómo llamar al método de abuelos sin obtener el error E_STRICT?
En PHP podemos hacerlo con algo como:
call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));
El problema es que si se tiene habilitada errores E_STRICT obtendrá un error como:
normas estrictas: método no estático Abuelos :: grandParentMethod() no debería ser llamado de forma estática en ...
he encontrado una sola solución para esto (sin quitar E_STRICT), y es sólo la adición de la @
a s Subir el error.
Pero eso es realmente feo, ¿alguien sabe una mejor solución?
Gracias! PS: No puedo crear una instancia de un nuevo objeto como:
$grandparent = get_parent_class(get_parent_class($son));
$gp= new $grandparent;
$gp->grandParentMethod
porque tengo que llamar a mi método de abuelos en el contexto de $ hijo.
Hola Enrique, parece que la respuesta de Krinkle es más adecuada y clara. Tampoco requiere que establezca el acceso público en la clase de abuelo para acceder desde la clase de nieto ... si está de acuerdo, ¿podría cambiar la respuesta aceptada a la respuesta de Krinkle? – a20