Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] nie rozumiem obiektowości
pain3hp
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 2
Dołączył: 23.01.2010

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


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' (IMG:style_emoticons/default/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ę
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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.  
Go to the top of the page
+Quote Post
pain3hp
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 2
Dołączył: 23.01.2010

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


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?
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #4





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Nie są identyczne, nie powinno się tak robić (2 przykład, pomijając oczywiście wykorzystanie magii (IMG:style_emoticons/default/winksmiley.jpg) ), bo mogą być niezainicjowane zmienne.

Tak, tworzą się same, co nie jest zbyt dobre, ale czasami przydatne.

Ten post edytował Mephistofeles 27.11.2010, 11:11:01
Go to the top of the page
+Quote Post
pain3hp
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 2
Dołączył: 23.01.2010

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


dzięki za informacje
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 01:19