Czasami potrzebuję wykonać metodę dziadkową (to znaczy obejść metodę nadrzędną), wiem, że to jest zapach kodu, ale czasami nie mogę zmienić innych klas (frameworków, bibliotek itp.).Jak wywołać metodę typu grandparent bez otrzymania błędu E_STRICT?
W PHP można to zrobić z coś jak:
call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));
Problem polega na tym, że jeśli masz błędy E_STRICT włączona dostaniesz błąd jak:
surowe normy: metody non-statyczne GrandParent :: grandParentMethod() nie powinien być wywoływany statycznie w ...
Znalazłem tylko jedno rozwiązanie w tym celu (bez usuwania E_STRICT), a to po prostu dodaje @
do s podnieść błąd.
Ale to naprawdę brzydkie, czy ktoś zna lepsze rozwiązanie?
Dzięki! PS: Nie mogę instancji nowego obiektu jak:
$grandparent = get_parent_class(get_parent_class($son));
$gp= new $grandparent;
$gp->grandParentMethod
bo muszę zadzwonić do mojego sposobu dziadka w kontekście $ syna.
Hej Enrique, wygląda na to, że odpowiedź Krinkla jest bardziej odpowiednia i klarowniejsza. Nie wymaga to również ustawiania publicznego dostępu do klasy dziadka, aby uzyskać do niej dostęp z poziomu wnuczki ... jeśli zgodzisz się, czy możesz zmienić zaakceptowaną odpowiedź na odpowiedź Krinkla? – a20