Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Metody magiczne, Czy jest sens stosowania?
JoShiMa
post
Post #1





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


dla mnie to chore wywoływac metodę magiczną wewnątrz klasy.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przede wszystkim powinieneś myśleć nie o autorze klasy, a o jej użytkowniku (nawet jeżeli jest to sam autor).
  1. echo $obj->varA; // varA
  2. echo $obj->varB; // varB
  3.  
  4. $obj->varA = 'test';
  5. echo $obj->varB; // NULL - wtf?
Przecież nigdzie nie zmieniłem żadnej wartości, jedynie zmieniłem wartość właściwości varA. Usuwam przypisanie wartości - zwraca mi ładnie "varB", przywracam przypisanie wartości jakiejś innej właściwości - zwraca mi NULLa.
W taki oto prosty sposób kod staje się magiczny. O ile w przypadku gdy sam jesteś autorem i użytkownikiem dasz sobie bez problemu radę. Ale wyobraź sobie zewnętrzną bibliotekę z piętnastoma takimi obiektami, każdy z jakimś "zwalniającym nas z potrzebny niepotrzebnego pisania" potworkiem pod postacią __set(). A później dochodzą Ci kolejne 4 biblioteki z kolejnymi potworkami - idzie się pochlastać w końcu.

Przykład drugi:
  1. echo $obj->getVarA(); // varA
  2. echo $obj->getVarB(); // varB
  3.  
  4. $obj->setVarA('test');
  5. echo $obj->getVarB(); // NULL - wtf?
Ale reakcja jest trochę inna - od razu wiadomo, że jedynym możliwym miejscem zmiany wartości varB jest metoda setVarA().

Trzeba jeszcze zaznaczyć, że nie jest to najlepszy kod. 10 getterów/setterów najparwdopodobniej powinno być zastąpionych jedną parą, a operacje powinny być wykonywane na tablicy.

Trzeba pamiętać, że cała magiczność ogranicza się do zamiany $obj->__set('var', $value) na $obj->var = $value. Naprawdę nie zyskujemy niczego poza kilkoma znaczkami.

Ahh.. mogłaby to być jeszcze metoda getVarB() (która przykładowo zwracałaby raz varB a raz NULL w zależności od ilości wywołań) - ale wtedy do pierwszego listingu należałoby też dodać wtf spowodowane przez __get() (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- JoShiMa   Metody magiczne   25.02.2011, 10:13:09
- - wookieb   Nieprawda. Jest sens, jeżeli niesie to za sobą jak...   25.02.2011, 10:14:05
|- - JoShiMa   Cytat(wookieb @ 25.02.2011, 10:14:05 ...   25.02.2011, 10:15:16
- - wookieb   Przykład [PHP] pobierz, plaintext class test ...   25.02.2011, 10:18:58
|- - JoShiMa   Cytat(wookieb @ 25.02.2011, 10:18:58 ...   25.02.2011, 10:26:48
- - Crozin   Sensowność metod magicznych sama w sobie jest spra...   25.02.2011, 10:20:52
- - wookieb   Cytat(Crozin @ 25.02.2011, 10:20:52 )...   25.02.2011, 10:24:34
- - Daiquiri   Nie widzę przeszkód w stosowaniu metod magicznych,...   25.02.2011, 10:28:22
- - wookieb   Chyba jednak nie zdajecie sobie sprawy co mówicie....   25.02.2011, 10:33:46
|- - JoShiMa   Cytat(wookieb @ 25.02.2011, 10:33:46 ...   25.02.2011, 13:41:30
- - Crozin   CytatSłyszałem o tym ale nadal nie widzę powodu by...   25.02.2011, 10:35:58
- - wookieb   Cytat(Crozin @ 25.02.2011, 10:35:58 )...   25.02.2011, 10:44:36
- - Crozin   Przede wszystkim powinieneś myśleć nie o autorze k...   25.02.2011, 11:04:03
- - wookieb   To może podam przykład z życia. [PHP] pobierz, pla...   25.02.2011, 12:26:59
- - thek   To ja dorzucę jeszcze moją uwagę. Funkcje magiczne...   25.02.2011, 12:34:21
- - wookieb   Cytat(thek @ 25.02.2011, 12:34:21 ) T...   25.02.2011, 12:37:50
- - cojack   Dla mnie jest rzeczą okrutną że nie można __set i ...   25.02.2011, 12:43:05
- - Eby   Z mojej perspektywy to trochę tak jakby sprzeczać ...   25.02.2011, 13:06:08
- - thek   Cytat(wookieb @ 25.02.2011, 12:37:50 ...   25.02.2011, 13:39:36
- - Crozin   @Eby: Jak można porównywać return do echo? Poza ty...   25.02.2011, 13:51:03
|- - Eby   Cytat(Crozin @ 25.02.2011, 13:51:03 )...   25.02.2011, 14:11:14
- - cojack   Nudni jesteście, ilu programistów tyle pomysłów ja...   25.02.2011, 14:02:28
- - Zyx   wookieb -> i ja bym ten Twój przykład z życia z...   25.02.2011, 14:12:11
|- - Eby   Cytat(Zyx @ 25.02.2011, 14:12:11 ) Ni...   25.02.2011, 14:23:39
- - Zyx   Jakie "dodatkowe parametry", kiedy nic z...   25.02.2011, 14:46:09
- - wookieb   Cytat(thek @ 25.02.2011, 13:39:36 ) W...   26.02.2011, 12:53:29
- - Crozin   Przecież napisałem, że w przypadku metod __get() i...   26.02.2011, 13:37:10
- - thek   Wookieb. Ja nie jestem anty-magic zatwardziały. Ni...   26.02.2011, 14:57:15


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: 5.10.2025 - 02:45