Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podstawowe znaczniki w php
Forum PHP.pl > Forum > Przedszkole
marianek89
Witam,

ogarniam już php na pewnym poziomie, także nie jestem całkiem zielony.
Przechodzę do rzeczy.

Zastanawiają mnie pewne znaczniki, opisy, które widuję często w kodzie.

1.:
Co czym się różni taki zapis:
  1. $object =& $var;

od takiego:
  1. $object = $var;



2.:
Przy tworzeniu klasy, przy deklarowaniu zmiennych spotkałem się z
  1. var $zmienna;
  2. $zmienna;
  3. private $zmienna;
  4. protected $zmienna;
  5. static $zmienna;

Rozumiem tylko to drugie i trzecie (zmienna prywatna nie może być wyświetlana inaczej niż przez funkcję w klasie).

3.: To samo pytanie co wyżej tylko, że dotyczy metod.
Czym mam się kierować tworząc metody, a konkretniej typy. Kiedy dawać statyczną, a kiedy protected? Jest w ogóle jakaś różnica między private a protected?
Jak to jest, że te static wywołujemy Klasa::Metoda, a te normalne Klasa->Metoda ?

Z góry dziękuję za wyjaśnienie wink.gif
kajzur
1. To referencja. Chodzi o pracę na właściwym obiekcie/zmiennej a nie na kopii.
2. Pierwszy punkt to zapis ze starszych wersji PHP. 4 to chronione pole klasy. Chodzi o hermetyzację (widocznosć pól). Static to metoda/zmienna statyczna czyli taka którą można wywołać bez tworzenia egzemplarza klasy.
Stosujemy statyczne tam gdzie czujemy że może będziemy musieli użyć metody tam gdzie tworzenie całej instancji klasy (tym samym zalokowanie pamięci) jest zbędne.
Bonhart
Ad 1.)
  1. $object =& $var;


To przypisanie przez referencje ( $object i $var będą miały tą samą wartość, nie zależnie do której przypiszesz wartość obie będą miały taką samą.

Możesz myśleć o tym w ten sposób, że obie pokazują dokładnie w to samo miejsce w pamięci

  1.  
  2. $var = 1;
  3.  
  4. $object =& $var;
  5.  
  6. echo 'var = ' . $var . "\n";
  7. echo 'object = ' . $object . "\n";
  8.  
  9. //zmieniamy wartosc wart
  10. $var = 2;
  11.  
  12. echo 'var = ' . $var . "\n";
  13. echo 'object = ' . $object . "\n";
  14.  
  15. $object = 3;
  16.  
  17. echo 'var = ' . $var . "\n";
  18. echo 'object = ' . $object . "\n";

Natomiast
  1. $object = $var;

to przypisanie przez wartość (tak jakby kopia), jak zmienisz $var to nie zmienia się $object

Ad 2)

php 4 tak się definiowało składowe klasy (wszystkie były publiczne), teraz używamy zakresów private, protected, public

private - dostęp tylko dla obiektów danej klasy
protected - dostęp dla obiektów danej klasy i klas dziedziczących po niej
public - dostęp dla wszystkich ( defacto nie zalecane, chyba że wiesz co czynisz tongue.gif )


static to zmienia lub metoda statyczna, nie potrzebujesz tworzyć obiektu danej klasy żeby sie do niej odwołać


Weźmy pod uwagę taką klase
  1. class A {
  2.  
  3. public function m1() {
  4. echo "m1";
  5. }
  6.  
  7. static public function m2() {
  8. echo "m2";
  9. }
  10.  
  11. }


żeby wywołać metodę m1 klasy A, musimy utworzyć obiekt tej klasy

  1.  
  2. $a = new A();
  3. $a->m1();


natomiast, żeby wywołać metodę statyczną m2, nie musimy tworzyć obiektu klasy tylko odwołujemy się do niej statycznie

  1. A::m2();


Uwaga: W metodach statycznych nie mamy dostępu do składowych klasy i operatora $this, bo nie mamy obiektu smile.gif


Poczytaj w manualu o klasach
marianek89
Dziękuję za jasne i przejrzyste wyjaśnienie.
Jestem mile zaskoczony przykładami, które właśnie zinterpretowałem smile.gif

Pozdrawiam
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.