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
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Chyba jednak nie zdajecie sobie sprawy co mówicie. Metody __set i __get umożliwiają zapewnienie dodatkowej logiki w aplikacji tak samo jak "set*" i "get*". Co jeżeli mam 100 właściwości w klasie? 200 metod get i set? Strasznie słabe. Wolę sobie zrobić metodę magiczną __call w połączeniu __set i __get i mieć identyczna funkcjonalność w znaczniej bardziej efektywny sposób.

Mówiąc, że takie operacje można zastąpić dowolną inna metodą jest trochę utrudnianiem losu samemu sobie.
Podam doskonały przykład. W C++ są dostępne wektory. Dzięki przeciążeniu operatorów (coś ala "metoda magiczna") można na nich w bardzo łatwy sposób wykonywać operacje matematycze. Będziemy rezygnować z tak niewyobrażalnej wygody tylko po to, żeby "jasno" było widać w kodzie "set"? Straszne słabe.

Dla jasności przykładu.
Przykładowy wektor to (1,2). Dodanie do niego drugiego wektora (2,3) następuje w ten sposób. (1 + 2, 2 + 3) = (3, 5)

Sam stosuje w większości set i get ale to tylko daltego by zapewnić sobie wywołania łańcuchowe. Przy dużej ilości właściwości to nie ma żadnego sensu.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #3





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

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


Cytat(wookieb @ 25.02.2011, 10:33:46 ) *
Chyba jednak nie zdajecie sobie sprawy co mówicie. Metody __set i __get umożliwiają zapewnienie dodatkowej logiki w aplikacji tak samo jak "set*" i "get*". Co jeżeli mam 100 właściwości w klasie? 200 metod get i set? Strasznie słabe. Wolę sobie zrobić metodę magiczną __call w połączeniu __set i __get i mieć identyczna funkcjonalność w znaczniej bardziej efektywny sposób.

Ale co Ci uniemożliwia wstawienie kodu, który umieściłbyś w __set() wstawić do jednej metody set i nie mieć ich 100?

  1. function set($varName,$value){
  2. $this->$varName = $value;
  3. }


Zadziała nawet jeśli nie istnieje taki parametr klasy, bo stworzy go w locie.

I po co Ci funkcja magiczna?


Nie twierdzę, że funkcje magiczne są zupełnie do bani. Jednak używanie ich wewnątrz klasy to totalny bezsens.

Ten post edytował JoShiMa 25.02.2011, 13:46:31
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: 4.10.2025 - 05:55