Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapisywanie zmiennej w klasie rodzica PHP
Forum PHP.pl > Forum > PHP
mati251195
Witam,

Mam problem związany z klasami w PHP. Mam taki kod (wyrzuciłem to, co jest zbędne, aby mi pomóc - dałem tylko istotne linie kodu): http://wklej.org/id/1803149/

Otrzymuję takie coś:

Controller (__construct): 1
Controller:
HomeController:

Chodzi mi o to, aby zapisać w klasie rodzica daną wartość. W klasach pochodnych stosowałem podobną metodą przypisywania wartości i to działało.

Będę wdzięczny za szybką pomoc wink.gif
redeemer
W klasie dziedziczącej musisz wykonać konstruktor klasy nadrzędnej.

  1. class HomeController extends Controller {
  2.  
  3. public function __construct() {
  4. parent::__construct();
  5. echo 'HomeController: ' . $this->pobierzStatusUzytkownika() . '<br><br>';
  6.  
  7. }
  8. }
mati251195
Nie rozumiem. Według Twojego kodu uruchomię konstruktor klasy rodzica, ale nie przekążę do niej żadnej wartości, a ta wartość w moim kodzie jest przekazwaya tylko nie mogę jej zapisać w klasie rodzica.
nospor
Cytat
dałem tylko istotne linie kodu

No wlasnie nie, nie dales istotnych linii kodu.
Z opisu tego co dostajesz na ekranie wynika, ze stworzyles dwa obiekty i sie dziwisz, ze jeden nie przekazuje wlasciwosci drugiemu. I slusznie, bo niby jakim cudem ma to zrobic?

Jesli jest inaczej, to pokaz tym razem caly kod a nie to co sie wydaje, ze jest wazne.
mati251195
Ale zrozum, że klasa pochodna PRZEKAZUJE wartość do klasy rodzica, ponieważ otzymuję:

Controller (__construct): 1

Problem jest w zapisaniu jest przekazanej wartości do zmiennej klasy Controller.
Pyton_000
To teraz Ty zrozum że kod który pokazałeś nie zrobi tego co twierdzisz że robisz.
mati251195
OK, dobrze - rozumiem. Zrobiłem taką mini wersją kodu: http://wklej.org/id/1804180/

Tutaj po wywołaniu funkcji echo nie dostaję rezultatu. Co w tym kodzie jest źle? Jeśli ten mini kod będzie działał to dalej sobie już poradzę smile.gif
Comandeer
Chcesz se kupić samochód - jedyne, co chcesz, żeby miał, to kluczyk:
  1. class Car
  2. {
  3. protected $key;
  4. }

Więc szukasz takiego. Znajdujesz dwa: BMW i Audi. I robisz ciekawy eksperyment: wkładasz kluczyk do Audi w salonie
  1. class Audi extends Car
  2. {
  3. public function __construct()
  4. {
  5. $this->key = 'włożony';
  6. }
  7. }

następnie lecisz do salonu BMW i sprawdzasz czy BMW ma włożony ten kluczyk:
  1. class BMW extends Car
  2. {
  3. public function __construct()
  4. {
  5. if($this->key === 'włożony')
  6. echo 'Kluczyk włożony';
  7. else
  8. echo 'Kluczyk niewłożony';
  9. }
  10. }


Chyba nie muszę mówić jaki jest rezultat wink.gif

PS Kierowcę najlepiej wsadzać do samochodu
threehundred
Cytat(mati251195 @ 26.09.2015, 12:41:26 ) *
OK, dobrze - rozumiem. Zrobiłem taką mini wersją kodu: http://wklej.org/id/1804180/

Tutaj po wywołaniu funkcji echo nie dostaję rezultatu. Co w tym kodzie jest źle? Jeśli ten mini kod będzie działał to dalej sobie już poradzę smile.gif


Te klasy nie mają nic ze sobą wspólnego to są dwie osobne instancje.
Poza tym coś takiego nie należy do zadań controllera.
mati251195
To jak mam to rozwiązać? Mam klasę Controller, następnie wywołuję klasy Users, która m.in. sprawdza czy użytkownik jest zalogowany albo przewraca sesję. I chciałbym mieć dostęp do statusu zalogowania użytkownika z klasy Home. Jak to zrobić?

Przerobiłem kod na taki: http://wklej.org/id/1804218/ i teraz działa, ale zapewne można to lepiej rozwiązać, więc proszę o Wasze porady smile.gif
threehundred
Moze cos w ten desen

http://wklej.org/id/1804242/

Tylko klasa UserService jako singleton.

Nie rozumiem tylko dlaczego potrzebujesz aż dwóch instancji Controllerów na jeden request chyba, że użyłeś przykładowych nazw.
mati251195
W jednej klasie mam rzeczy związane z użytkownikami, a w kolejnych klasach z pozostałymi elementami tak, aby nie robić jednego wielkiego pliku kontrolera.
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.