Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] nie rozumiem obiektowości
Forum PHP.pl > Forum > PHP
pain3hp
Będę bardzo wdzięczny jeśli ktoś poświęci chwilę czasu i wyjaśni mi te fragmenty kodu:

  1. class zawodnik
  2. {
  3. public $imie;
  4. public $nazwisko;
  5. public function przedstaw()
  6. {
  7. echo $this->imie;
  8. echo $this->nazwisko;
  9. }
  10. }
  11. $player = new zawodnik();
  12. $player->imie='Zenek';
  13. $player->nazwisko='Kowalski';
  14. $player->przedstaw();

Mam stworzoną klasę zawodnik która posiada dwa pola publiczne $imie i $nazwisko, oraz publiczną metodę przedstaw nie posiadającą żadnych argumentów, która jedynie wyświetli właściwości pola obiektu na którym zostanie wywołana?

operatorem
  1. new
tworzę obiekt $player klasy zawodnik.
Kolejne dwie instrukcje nadają (teraz proszę o informację jak to nazywać), atrybuty, właściwości?....
  1. imie
, oraz
  1. nazwisko
, obiektowi $player.
Następnie na obiekcie $player wywołuję metodę przedstaw();

Na ekranie pojawia się: ZenekKowalski

Wszystko wydaje się być OK ale taki sam efekt jest w przypadku takiego kodu i pytanie brzmi dlaczego?
  1. class zawodnik
  2. {
  3. public function przedstaw()
  4. {
  5. echo $this->imie;
  6. echo $this->nazwisko;
  7. }
  8. }
  9. $player = new zawodnik();
  10. $player->imie='Zenek';
  11. $player->nazwisko='Kowalski';
  12. $player->przedstaw();


Kolejne pytanie dotyczy metod klasowych __get i __set
książka vademecum profesjonalisty wyd.czwarte podaje kod ktory niczego nie wyświetla, jednak jest bardzo słabo opisane co się dzieje, w miarę możliwości proszę aby ktoś zorientowany mi to wytłumaczył
  1. class nazwaklasy
  2. {
  3. public $atrybut;
  4. function __get($nazwa)
  5. {
  6. return $this->$nazwa
  7. }
  8. function __set($nazwa, $wartosc)
  9. {
  10. $this->$nazwa = $wartosc;
  11. }
  12. }
  13. $a = new nazwaklasy();
  14. $a->$atrybut = 5 //dlaczego jest $ przed 'atrybut' questionmark.gif?
  15. $a->$atrybut; //pisza w ksiazce ze sie wywoła teraz __get jednak na ekranie nic nie ma nawet jak dodam echo


dziękuję
Fifi209
Co do dwóch pierwszych kodów na moje oko są takie same.

Co do drugiego np. tak:
  1. <?php
  2.  
  3. class test {
  4.  
  5. private $temp;
  6.  
  7. public function __get($name) {
  8. return $this->temp[$name];
  9. }
  10.  
  11. public function __set($name, $value) {
  12. $this->temp[$name] = $value;
  13. }
  14.  
  15. }
  16.  
  17. $x = new test;
  18. $x->cos = 'a';
  19.  
  20. echo $x->cos;
  21.  
  22. ?>
  23.  
pain3hp
w pierwszym przypadku nie jest to samo bo raz jest klasa z polami a drugi raz bez.

$x->cos = 'a';
czyli pola klasy w PHP tworzą się same?
Mephistofeles
Nie są identyczne, nie powinno się tak robić (2 przykład, pomijając oczywiście wykorzystanie magii winksmiley.jpg), bo mogą być niezainicjowane zmienne.

Tak, tworzą się same, co nie jest zbyt dobre, ale czasami przydatne.
pain3hp
dzięki za informacje
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.