Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywoływanie abstrakcyjnej metody dziecka w operacji rodzica, abstract, extends, self i fatal error
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


  1. <?php
  2. abstract class Rodzic
  3. {
  4.    /**
  5.      * Operacja wykorzystywana przez potomstwo
  6.      */
  7.    public static function operacja()
  8.    {
  9.        echo self::innaOperacja();
  10.    }
  11.    /**
  12.      * Wymagana operacja do zaimplementowania przez dziecko
  13.      */
  14.    abstract public static function innaOperacja();
  15. }
  16. class Dziecko extends Rodzic
  17. {
  18.    public static function innaOperacja()
  19.    {
  20.        return 'Dane indywidualne dla każdego dziecka.';
  21.    }
  22. }
  23. // Wywoła błąd:
  24. // Fatal error: Cannot call abstract method Rodzic::innaOperacja()
  25. Dziecko::operacja();
  26. ?>
Jak ten problem rozwiązać? (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
iro88
post
Post #2





Grupa: Zarejestrowani
Postów: 47
Pomógł: 3
Dołączył: 13.10.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Odgrzeję, bo nie bardzo rozumiem jak wykonać metodę dziecka z poziomu rodzica.
Mam plik index.php który sprawdza url i jeśli jest jakaś 'akcja' to ją wykonuje, a następnie wyświetla 'widok'. Wszystko gra, tylko w każdym z kontrolerów muszę powielać funkcję:
  1. public function doAction() {
  2. if (!empty($_GET['a'])) {
  3. $a = $this->filterString($_GET['a']);
  4. } else { $a = null;}
  5.  
  6. if ($a != null) {
  7. if (method_exists($this,$a)) {
  8. $this->$a();
  9. }
  10. }
  11. }

i na początku, każdego z widoków wykonywać tą funkcję. Chcąc ograniczyć ilość kodu, postanowiłem stworzyć główny kontroler aplikacji i dziedziczyć jego funkcje w pozostałych kontrolerach. Jednak nie mam pojęcia czy w ogóle jest możliwe dynamiczne wykonywanie metod dzieci z poziomu rodzica, a jeśli tak, to nie do końca wiem jak. Za wszelkie wskazówki, fragmenty kodu, dziękuję.

Edit:
Ok. Zanim zadam pytanie popróbuję najpierw 'na idiotę'. A więc: nie rozumiem, lecz spróbowałem wywołać metodę powyższym skryptem i... działa (IMG:style_emoticons/default/blink.gif)

Ten post edytował iro88 15.04.2011, 14:17:24
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 10:16