Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: public i protected
Forum PHP.pl > Forum > PHP > Object-oriented programming
aniabek
Witam...
Mam taką klasę:
  1. <?php
  2. class DB_Mysql
  3. {
  4. protected $user;
  5. protected $pass;
  6. protected $dbhost;
  7. protected $dbname;
  8.  
  9. public function __construct ($u, $p, $dbh, $dbn){
  10. $this->user = $u;
  11. $this->pass = $p;
  12. $this->dbhost = $dbh;
  13. $this->dbname = $dbn;
  14. }
  15.  
  16. /*
  17. dalsza część klasy ....
  18. */
  19.  
  20. }
  21. ?>


i taki błąd: "Fatal error: Cannot access protected property DB_Mysql::$user"
w lini 37 pliku baza.inc czyli w pierwszej lini konstruktora: $this->user = $u;

Na co dzień piszę w C++ więc może w php działa coś inaczej.
Ale chyba pola chronione powinny być widoczne w konstruktorze klasy...

Jak zmienię protected na public wszystko działa OK. Chciała bym jednak wiedzieć co jest nie tak w tym co napisałam powyżej.

Na serwerze mam php Version 5.2.0

Pozdrawiam
Anna Bekus
Norbas
Cytat
Ale chyba pola chronione powinny być widoczne w konstruktorze klasy...

Są widoczne smile.gif
Pokaż jak tworzony jest egzemplarz klasy.
aniabek
Wydaje mi się, że w kodzie wszystko jest ok. Poniżej zamieściłam kompletny fragment kodu, który pozwala na zauważenie błędu. Co ciekawe... przy pierwszym uruchomieniu tego pliku wszystko jest ok. Przy każdym następnym uruchomieniu - nie ważne jaki system i jaka przeglądarka - otrzymuję:

Fatal error: Cannot access protected property A::$x

Jeśli plik przekopiuję do innego folderu na serwerze... znowu pierwszy raz jest ok, a później ten sam błąd.

Jeśli protected zmienię na public lub private wszystko jest ok. Sprawdzałam na innych serwerach i działa dobrze, więc chyba admin namieszał coś na serwerze i się nie przyznał mad.gif

  1. <?php
  2. class A
  3. {
  4.  protected $x;
  5.  public function __construct()
  6.  {
  7. $this->x = 0;
  8.  }
  9.  
  10.  public function show()
  11.  {
  12. print $this->x;
  13.  }
  14. }
  15. $a = new A;
  16. $a->show();
  17. ?>



Właśnie dostałam odpowiedź od admina co zrobić, żeby było ok.

Jest to problem akceleratora php eaccelerator. Należy zmienić w ustawieniach akcelerator na APC smile.gif
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.