Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PHP5] Co się stanie jeśli użyję zmiennej klasy która nie istnieje?
Forum PHP.pl > Forum > Przedszkole
extreme-dh
Mam pytanie odnoścnie zachowania PHP. Prosty przykład:

  1. class KlasaPHP5{
  2.  
  3. function __construct( $foo ){
  4. $this->bar = $foo;
  5. }
  6.  
  7. }


Moje pytanie, co sie stanie jeśli przypiszę wartość do właściwości klasy, która nie została wcześniej zadeklarowana?
Spotkałem taki przypadek w jednym z moich skryptów przez przypadek i zdziwiło mnie że nie wyrzuciło żadnego błędu.
Czy ta zmienna staje się automatycznie nową składową klasy? Czy różni się ona czymś od tej wcześniej zadeklarowanej?

Zdziwiło mnie to strasznie, myślałem, że przynajmniej jeśli chodzi o klasy PHP będzie bardziej restrykcyjne niż zwykle.

Nie wiem czy to ma znaczenie ale serwer stoi na Windowsie (IIS 6.0, PHP 5.2.14)
wookieb
Będzie to zwykła właściwość publiczna.
cojack
Cytat(wookieb @ 25.10.2011, 08:39:58 ) *
Będzie to zwykła właściwość publiczna.


Prywatna.
nospor
@cojack
  1. class KlasaPHP5{
  2.  
  3. function __construct( $foo ){
  4. $this->bar = $foo;
  5. }
  6.  
  7. }
  8.  
  9. $obj = new KlasaPHP5('Buuu');
  10. echo $obj->bar;
cojack
Cytat(nospor @ 25.10.2011, 09:34:40 ) *
@cojack
  1. class KlasaPHP5{
  2.  
  3. function __construct( $foo ){
  4. $this->bar = $foo;
  5. }
  6.  
  7. }
  8.  
  9. $obj = new KlasaPHP5('Buuu');
  10. echo $obj->bar;


Faktycznie, publiczna.
konrados
@extreme-dh: ja dodam jeszcze od siebie, że jako (były) programista c++, to zachowanie php też było dla mnie lekkim szokiem:) Z początku traktowałem to jako głupotę, ale z czasem się przyzwyczaiłem.

Robiąc aplikacje webowe musisz się do tego przyzwyczaić z jeszcze jednego powodu - podobnie działa javascript. Możesz do dowolnego obiektu (instancji klasy) dołożyć dowolne zmienne (a także metody), np. tak:

  1. <script type = 'text/javascript'>
  2. function xyz (){//to będzie obiekt
  3. this.v = 11;
  4. }
  5.  
  6. var x = new xyz;
  7. x.newvar = 13;//nowa zmienna w obiekcie x
  8. alert(x.v+','+x.newvar);//wyświetli 11,13


Tak więc w przypadku aplikacji webowych z użyciem php+js musisz nieco zmienić tok myślenia i się przyzwyczaićsmile.gif

W js możesz nawet dołożyć metody do wbudowanych klas - używając prototype.
extreme-dh
No tak, faktycznie, widać w PHP poszli tropem JS i AS w sumie też.
Niezła "zaskoczka" z mojej strony smile.gif Szczerze powiedziawszy to nie spodziewałem się takiego zachowania.
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.