Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dziedziczenie
NickOver
post
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 10
Dołączył: 13.03.2014
Skąd: Bydgoszcz

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
johny_s
post
Post #2





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


Przecież nigdzie nie masz inicjalizowanych tych zmiennych to czego się spodziewasz?
Go to the top of the page
+Quote Post
olszam
post
Post #3





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


  1. class Index extends Controller{
  2. function __construct(){
  3. new Controller();
  4. }
  5. }
Go to the top of the page
+Quote Post
johny_s
post
Post #4





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


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
Go to the top of the page
+Quote Post
NickOver
post
Post #5





Grupa: Zarejestrowani
Postów: 332
Pomógł: 10
Dołączył: 13.03.2014
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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
Go to the top of the page
+Quote Post
NickOver
post
Post #7





Grupa: Zarejestrowani
Postów: 332
Pomógł: 10
Dołączył: 13.03.2014
Skąd: Bydgoszcz

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


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ł.
Go to the top of the page
+Quote Post
com
post
Post #8





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


http://php.net/manual/en/language.oop5.decon.php

Tu masz przykład (IMG:style_emoticons/default/smile.gif)

Jeśli chcesz mieć dostęp do pół z klasy bazowej, to musisz ja zainicjalizować (IMG:style_emoticons/default/smile.gif)

Ten post edytował com 21.04.2015, 14:14:33
Go to the top of the page
+Quote Post
olszam
post
Post #9





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 22.08.2025 - 15:41