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%)
-----


Cytat
Słyszałem o tym ale nadal nie widzę powodu by widzieć w tym jakiekolwiek przeciwwskazania.
Co przemawia za metodami magicznymi?
- W pewnych przypadkach pozwalają uratować się przed utratą wstecznej kompatybilności.

Dodatkowe "zalety":
- krótszy kod - bo to właśnie różnica 4 znaków na linię świadczy o jakości kodu.

Wady:
- Kod staje się nielogiczny. Nagle operacje, które nie powinny mieć miejsca stają się możliwe i są kompletnie nieprzewidywalne.
- Brak wsparcia ze strony IDE.
- Niezbyt ciekawa sytuacja przy debuggowaniu/próbie zrozumienia kodu.
- Problemy przy dokumentowaniu kodu.
- A przede wszystkim... kod staje się magiczny czyli tracimy jego klarowność i jednoznaczność/oczywistość.

Cytat
Będzie jednak (z tego co wiem) problem z Reflection API?
Całe szczęście z poziomu refleksji nie istnieje coś takiego. Metody magiczne same w sobie niczym nie różnią się od tych normalnych. Jedynie interpreter przed wyrzuceniem błędu o braku metody/właściwości sprawdza czy aby przypadkiem jakaś magiczna metoda, która mogła by się tym zająć nie istnieje. Możesz odwoływać się do nich jak do każdej innej metody: $obj->__call('abc', array('def'));

EDIT:
Cytat
Co jeżeli mam 100 właściwości w klasie? 200 metod get i set? Strasznie słabe.
Strasznie słabe to jest posiadanie takiej ilości właściwości. Poza tym przecież mamy coś takiego jak... tablice i kolekcje.
  1. public function set($key, $value) {
  2. $this->myArray[$key] = $value;
  3. }
__set spisze się jedynie w przypadku, gdy dla wszystkich przypadków użycia będziemy mieli względnie taki sam algorytm. Bo jeżeli każdą zmienną miałbyś traktować indywidualnie skończyłbyś z dwoma setkami IFów.

Co do przeciążania operatorów. Faktycznie w przypadku wielu struktur matematycznych są fajne. Fajnie jest zrobić sobie $myVector - 5 czy $myMatrix * $myMatrix. Ale jedyne co zyskujemy to różnicę kilku znaków ($myVector.substract(5) VS $myVector - 5) a w zamian otrzymujemy mechanizm przez którego powstają potworki których zasada działania jest kompletnie nielogiczna/niezrozumiała/magiczna.
To samo spotkało metody magiczne w PHP - są one używane w nieprawidłowy sposób. Chyba tylko po to by ich używać.

Ten post edytował Crozin 25.02.2011, 10:43:22
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: 3.10.2025 - 00:55