Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziedziczenie
Forum PHP.pl > Forum > PHP
NickOver
Cześć.
Mógłby mi ktoś bardziej wytłumaczyć dziedziczenie? Z tego co wiem taki kod powinien działać:
  1. class Controller {
  2.  
  3. public $language;
  4. public $smarty;
  5. public $input;
  6.  
  7. public function initialize(){
  8. $this->smarty = new Smarty;
  9. $this->protectRequest();
  10. $this->setLanguage();
  11. $this->distribute();
  12. }
  13.  
  14. private function setLanguage(){
  15. require_once('class/language.php');
  16. $language = new Language;
  17. $this->language = $language->setPageLanguage();
  18. }
  19.  
  20. private function protectRequest(){
  21. if (!empty($_GET)){
  22. $this->input['get'] = Utils::protect($_GET);
  23. }
  24. if (!empty($_POST)) {
  25. $this->input['post'] = Utils::protect($_POST);
  26. }
  27. if (!empty($_COOKIE)) {
  28. $this->input['cookie'] = Utils::protect($_COOKIE);
  29. }
  30. }
  31.  
  32. private function distribute() {
  33. if(isset($this->input['get']['page'])){
  34. $page = $this->input['get']['page'];
  35. $this->loadPage($page);
  36. } else {
  37. $this->loadPage(Config::defaultPage);
  38. }
  39. }
  40.  
  41. public function loadPage($page){
  42. l($this);
  43. require_once (Config::controllerDir.'/'.$page.'.php');
  44. new $page;
  45. }
  46. }
  47.  
  48.  
  49.  
  50. class Index extends Controller{
  51.  
  52. function __construct(){
  53. l($this);
  54. }
  55. }

l(); to taki var_dump na sterydach. Jak widzicie dump'uje $this przed wywołaniem, wypluwa mi to co oczekiwałem, lecz gdy dump'uje w klasie index mam same pola z klasy Controller lacz są w nich nule. Czemu przy rozszerzaniu nie przenoszą się ich wartości? I co ważniejsze co zrobić aby się przenosiły?
johny_s
Przecież nigdzie nie masz inicjalizowanych tych zmiennych to czego się spodziewasz?
olszam
  1. class Index extends Controller{
  2. function __construct(){
  3. new Controller();
  4. }
  5. }
johny_s
Cytat(olszam @ 20.04.2015, 23:15:26 ) *
  1. class Index extends Controller{
  2. function __construct(){
  3. new Controller();
  4. }
  5. }

Co to za cudo?
do rodzica odwołuje się przez parent
NickOver
Cytat(johny_s @ 21.04.2015, 00:06:33 ) *
Przecież nigdzie nie masz inicjalizowanych tych zmiennych to czego się spodziewasz?


Sądziłem że jakby z automatu przejmie wartości tych pól do $this.
Turson
Przejmuje wartości, gdy własności rodzina są publiczne lub chronione. Są null ponieważ żadna metoda modyfikująca ich wartośc nie jest wywołana
NickOver
We wszystkich polach są wartości przed rozszerzeniem tej klasy. Ale jak rozumiem najpierw muszę rozszerzyć klasę a dopiero potem coś robić w 'controller' aby pola były dostępne wraz z wartościami? A czy istnieje coś aby to obejść? tj. średnim rozwiązaniem było by w każdym rozszerzeniu klasy controller wywoływać metody z controller. Chyba że najpierw bym rozszerzał a dopiero potem w ogóle coś robił.
com
http://php.net/manual/en/language.oop5.decon.php

Tu masz przykład smile.gif

Jeśli chcesz mieć dostęp do pół z klasy bazowej, to musisz ja zainicjalizować smile.gif
olszam
Cytat(johny_s @ 21.04.2015, 01:31:20 ) *
Co to za cudo?
do rodzica odwołuje się przez parent

a no tak źle zrobiłem, sorry mój błąd smile.gif
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.