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




Cytat(thek @ 25.02.2011, 13:39:36 ) *
Wookieb... Dobrze napisałem. Używając __set i __get, tworzymy metodę, która udostępnia wszystkim na zewnątrz atrybuty klasy. Jeśli byśmy tego nie chcieli w pełni, to musimy to ograniczać już wewnątrz definicji tej metody. Przykładowo mamy wspomnianą przez Ciebie klasę z 200 atrybutami, w tym 5 private i 5 protected, z których nie wszystkie chcemy udostępniać na zewnątrz. Co robimy? Sięgamy po refleksję by sprawdzić, czy dany atrybut jest na "black-liście"? Fajnie... Kosztem naszej wygody (linie kodu) zarżynamy wydajnościowo aplikację, która oprócz magii jeszcze po refleksję sięga.

Thek błagam Cie. Myśl czasem. To, że __get i __set działają przy PRÓBIE dostania się do właściwości prywatny WCALE nie oznacza, że chcemy ich do tego używać. To, że widziałeśtylko takie zastosowanie tej metody wcale nie znaczy, że jest jedyne. Opcji jest całe mnóstwo.


Cytat
O to mi chodziło w przykładzie. __set i __get oraz inna magia daje dostęp nie zawsze w sposób jaki byśmy chcieli ostatecznie uzyskać i musimy nad tym panować. Poza tym powiedz mi jedno wookieb: "Czy __set i __get ruszają do działania jeśli atrybut jest public?", bo jak dla mnie nie. Sam kwantyfikator zezwala na grzebanie mi w zmiennych public, więc o czym my mówimy tutaj? O pisaniu settera i gettera magicznego dla czegoś, co i tak nie będzie użyte? Bo klasa mając składową publiczną odda nam ją od razu i odwołanie się do magii nie nastąpi nigdy?

Ale co to ma do rzeczy? Wszystko zależy od projektu klasy. Jeżeli ktoś miesza magię z publicznymi właściwościami to jego problem. To tak jakby mówić, że żelazko jest BE bo można się nim poparzyć... Wszystko z rozwagą. Proszę Cię THEK, wiem że lubisz się wygadać ale ty już nie rozmawiasz. LEJESZ WODĘ mówiąc o rzeczach oczywistych.

Cytat
PS... Tak wiem... Pozwala utworzyć i odczytywać w locie obiektowi nieistniejące składowe choćby, ale IMHO takie posługiwanie się wynika ze zrypanego procesu projektowego. Źle zaprojektowana aplikacja po to sięgnie. Dobrze przemyślana nie potrzebuje takich łat.

A widział ty kiedyś coś takiego jak settery i gettery w innych językasz? Wiem, że chyba w JS gdzieś to dało się zrobić, w AS na pewno. Co to dawało? Znacznie łatwiejsze w użyciu reagowanie na zmiany pewnych wartości. I sry ale nie przekonasz mnie, że jest to brzydkie. Jest piękne w swojej prostocie i wykorzystaniu.


Cytat
Wszystko, co da się zrobić za pomocą metod magicznych, da się równie elegancko zrobić zwykłymi wywołaniami metod. I taki kod będzie w dodatku dużo czytelniejszy. Ostatnio musiałem wrócić do Symfony 1.x i Doctrine 1.x i tracę tam naprawdę sporo czasu na radzenie sobie z różnymi dziwnymi i niepożądanymi dla mnie skutkami tego, że połowa tego, co się dzieje w tym frameworku to czysta magia. Pisze sobie człowiek metodę i nagle mu się rozpierdziela odwołanie do... pola, albo jeszcze śmieszniej: odwołanie tablicowe w zupełnie innej części kodu. Nie będę wspomniał już o wynalazkach w stylu tych, co zaproponował Eby, które też dokładają swoje idiotyzmy.

Powiedz to fanom CAKEPHP.

Chwila stopu. O co my się kłócimy?
Co jest ładniejsze?
Cytat
$klasa->set('pole', 'wartosc');

// czy
$klasa->pole = 'wartosc';

Przecież to zależy od preferencji i swoje upodobania.
1 przyda się do wywoływania łańcuchowego a drugie do pracowania na obiekcie klasy jak na STDClass. I tak 2 rozwiązania jest zarąbiście wygodne.

Ja mam cały czas wrażenie, że jesteście zamknięci w schemacie MAGIA = dostęp do włąściwości private i protected. Skończcie z tym bo zastosowań __get i __set jest dużo dużo więcej.
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: 16.10.2025 - 05:07