Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php|oop] Zmienna publiczno-prywatna (lokalna)
Forum PHP.pl > Forum > PHP > Object-oriented programming
Sokal
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
  }
}
Sedziwoj
Chodzi Ci o coś typu final?
Sokal
Nieeeee.... final można chyba dziedziczyć? O.o
mike
Powiedz lepiej po co Ci cos takiego, bo być może najprościej przyświeca temu jakiś ... nieuzasadniony cel :-)
Sedziwoj
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.
Sokal
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ć.
UDAT
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 )
Sedziwoj
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.
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.