![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Podczas pisania kontrolera napotkałem pewien problem. Struktura klas wygląda następująco: jest klasa abstrakcyjna kontroler i dziedzicząca z niej klasa strona. W klasie controller jest przykładowa metoda:
natomiast w klasie dziedziczącej jest taki kod:
Wszystko uprościłem dla jasności: zwykła zmienna zadeklarowana w metodzie przodka nie chce się wyświetlać w metodzie klasy pochodnej mimo wykonania metody przodka. Czy da się w jakiś sposób sprawić, aby $a była widoczna w w metodzie strona->a() ? -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
To tak jakbyś zrobił:
Nie możesz tak zrobić. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 44 Dołączył: 31.07.2011 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie da się. Jedyne wyjście to przenieść tą zmienną na zewnątrz funkcji, tzn. zadeklarować w klasie, nie wewn. funkcji
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 9.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zwróć $a returnem z metody przodka, albo wywołując parent::a() przekaż do metody przodka zmienną przez referencję parent::a(&$a)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
W przypadku każdej funkcji/klasy zawsze jesteś ograniczony zasięgiem zmiennych. Zmienne tworzone wewnątrz funkcji mają zasięg tylko do tych funkcji (z wyjątkiem zmiennych statycznych), możesz skorzystać z właściwości klasy (zmienne obiektu) i tam przypisywać wartość i ją jakby tymczasowo przetrzymywać.
Kod <?php
abstract class controller { protected $a; public function a() { $this->a = 'A'; } } class strona extends controller { public function a() { parent::a(); echo $this->a; } } |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 3 Dołączył: 22.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
zmienne powinny być
protected public NIE private a przepraszam by_ikar wyjaśnił to na przykładzie. Ten post edytował Robert3d 19.11.2011, 01:48:10 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 13:15 |