Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php|oop] Zmienna publiczno-prywatna (lokalna)
Sokal
post
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


Cześć.

Od dłuższego czasu w PHP brakuje mi zmiennej publiczno-prywatnej. Jest ona dostępna z zewnątrz, ale nie jest dziedziczona. Da się to jakoś rozwiązać bez pisania maila do developerów PHP? A może jest już taka możliwość, tylko nic o niej nie wiem? O.o

Kodowo:
Kod
class Example
{
  local $variable;
}

$example = new Example();
$example->variable = 123; // dozwolone

class ExampleParent extends Example
{
  public function get()
  {
    echo $this->variable; // nie wyswietli nic
  }
}
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #2





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Chodzi Ci o coś typu final?
Go to the top of the page
+Quote Post
Sokal
post
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


Nieeeee.... final można chyba dziedziczyć? O.o
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Powiedz lepiej po co Ci cos takiego, bo być może najprościej przyświeca temu jakiś ... nieuzasadniony cel :-)
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #5





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Sokal @ 25.06.2007, 20:03:15 ) *
Nieeeee.... final można chyba dziedziczyć? O.o


Jest dziedziczone, ale nie może być nadpisane. (jeśli mowa o właściwościach i metodach)

Nie wiedzę też możliwości, aby coś było publiczne i nie było dziedziczone.
Ale tak jak napisał mike, napisz co chcesz osiągnąć, bo czasem próbuje się od złej strony.
Go to the top of the page
+Quote Post
Sokal
post
Post #6





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


Stary problem ale gnębi... (frameworka już nie rozwijam)

Mam klase Controller, po której dziedziczą kontrolery... Jeżeli kontroler ma konstruktor to musi wywołać parent::__construct(); bo inaczej wywala error. W konstruktorze klasy Controller jest taka instrukcja $this->called = true; No i ta zmienna musi być dostępna z zewnątrz, ale nie może być dziedziczona, bo inaczej, ktoś sobie zrobi w konstruktorze kontrolera $this->called = true; i działa, errora nie ma... Przydałoby się żeby to nie było dziedziczone, ale żeby można to było z zewnątrz sprawdzić.
Go to the top of the page
+Quote Post
UDAT
post
Post #7





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


Czemu nie możesz zrobić tak:
  1. <?php
  2. class Controller {
  3. private $called = false;
  4.  
  5. public function __construct ( ) {
  6. $this -> called = true;
  7. }
  8.  
  9. final public function isCalled ( ) {
  10. return $this -> called;
  11. }
  12. }
  13. ?>


Z drugiej stony patrząc na kod na samej górze, możesz zrobić właściwość prywatną + getter'a i setter'a ( final ), który będzie analizował stacktrace'a i rzucał wyjątki ( przy czym nie widzę sensu tego rozwiązania )

Ten post edytował UDAT 28.06.2007, 13:27:17
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #8





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Sokal @ 25.06.2007, 22:12:31 ) *
Mam klase Controller, po której dziedziczą kontrolery... Jeżeli kontroler ma konstruktor to musi wywołać parent::__construct(); bo inaczej wywala error.


Wiesz, moim zdaniem zrobić sprawdzenie, ale takie tylko czy ktoś nie zapomniał, bo moim zdaniem jak ktoś będzie chciał ominąć to to zrobi, więc nie widzę sensu trudzić się tym zbytnio.

Do tego mówisz, że musi być wywołany konstruktor rodzica, bo inaczej wyrzuci błąd, no wiec coś robisz, ja mam np. inicjalizację cache przez agregacje i tworzenie fasady, więc nie sprawdzam czy ktoś zainicjalizowal, tylko czy do właściwości jest przypisana odpowiednia instancja, jeśli nie to wywalam wyjątek.
Nie sprawdzaj czy użytkownik coś zrobił, tylko czy masz poprawne środowisko pracy.
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: 23.08.2025 - 14:04