![]() |
![]() |
![]()
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.
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 05:07 |