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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
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 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:47