Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Podstawowe znaczniki w php
marianek89
post 14.03.2011, 21:27:49
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 14.03.2011

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


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
Go to the top of the page
+Quote Post
kajzur
post 14.03.2011, 22:02:50
Post #2





Grupa: Zarejestrowani
Postów: 385
Pomógł: 26
Dołączył: 22.03.2008
Skąd: TM

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


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.


--------------------
Zapraszam na mojego bloga. Dowiedz się jak uzyskać darmowy, zaufany certyfikat albo jak rozpoznawać głos ;)
Go to the top of the page
+Quote Post
Bonhart
post 14.03.2011, 22:05:56
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 20.06.2002

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


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


--------------------
---
Pozdrowienia
Marko
Go to the top of the page
+Quote Post
marianek89
post 14.03.2011, 22:21:01
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 14.03.2011

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


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

Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.06.2024 - 10:10