Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] MVC Dziwna sprawa z wywoływaniem metody dziedziczonej
Forum PHP.pl > Forum > Przedszkole
cve
Witam, zdziwiła mnie pewna sprawa otóż:
Jestem początkujący jeśli chodzi o budowanie aplikacji internetowych w PHP, właściwie to jeszcze nigdy nie miałem okazji żadnej zbudować... mniejsza z tym. Chciałem zrobić zastosować sobie bardzo prościutki w celach edukacyjnych wzorzec MVC więc wziąłem się za to tak:
STRUKTURA KATALOGÓW:
http://sites.google.com/site/carlvanersten/cve
I teraz zawartość kilku plików po koleji:
public/index.php:
  1. <?php
  2. set_include_path(get_include_path() . PATH_SEPARATOR . '../library/' . PATH_SEPARATOR . '../controllers/');
  3.  
  4. function __autoload($class) {
  5.  
  6. $filepath = str_replace('_', '/', $class).".php";
  7. require_once $filepath;
  8. }
  9.  
  10. class FrontController
  11. {
  12. public function dispatch() {
  13. $cont = $_GET['controller'];
  14. $action = $_GET['action'];
  15.  
  16.  
  17.  
  18. $class = ucfirst($cont);
  19.  
  20. $controller = new $class();
  21.  
  22. $controller->$action();
  23. }
  24. }
  25. $fc = new FrontController;
  26. $fc->dispatch();


library/Abstract/Controller.php:
  1. <?php
  2. class Abstract_Controller
  3. {
  4. public function index() {
  5. echo 'To jest z Abstracta';
  6. }
  7. }


oraz controllers/Index.php

  1. <?php
  2. class Index extends Abstract_Controller
  3. {
  4. public function index() {
  5. echo 'A to z Indexa';
  6. }
  7. }


i dziwnosc sytuacji polega na tym, że w tej sytuacji metoda index() w klasie Index extends Abstract_Controller w rezultacie na ekranie daje "A to z IndexaA to z Indexa" <--- tak właśnie tak "podwójnie" gdy zmienie nazwe tej metody tak by mogla sie pokazac metoda index z dziedziczonej klasy, zeby ta jej nie naspisywala to normalnie sie wyswietla "To jest z Abstracta", wiec moje pytanie brzmi: Dlaczego tak podwójnie wywołuje się ta metoda nadpisująca metodę z klasy bazowej??
cojack
Po pierwsze po to się tworzy klasy abstrakcyjne by w klasie dziedziczącej z niej, można było poszerzać właściwości jej metod. A Ty tu nic nie zrobiłeś. Wg mnie oczekiwanym przez Ciebie rezultatem byłoby:

To jest z Abstracta
A to z indexa.

Więc index w klasie index powinien wyglądać tak:
  1. public function index() {
  2. parent::index();
  3. echo 'A to z Indexa';
  4. }
cve
Po zastosowaniu:
  1. public function index() {
  2. parent::index();
  3. echo 'A to z Indexa';
  4. }

Wyświetla mi się teraz To jest z AbstractaA to z IndexaTo jest z AbstractaA to z Indexa, nadal podwójnie...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.