![]() |
![]() |
![]()
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: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
wookieb -> i ja bym ten Twój przykład z życia zapisał tak:
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. Kod $helperCollection->getHelper('tag')->render(); Ponadto thek ma rację. Jeśli pole jest zadeklarowane np. jako chronione, a my próbujemy dostać się do niego spoza klasy, wywoła się metoda magiczna. Jeśli ją źle napiszemy, będziemy mogli się do niej dostać. A tak w ogóle to podział private, protected i public ma sens tylko jako zachęta do stosowania pól zgodnie z przeznaczeniem. Jak komuś będzie zależeć, zawsze da się w ten czy inny sposób wartość pola prywatnego odczytać spoza obiektu bez względu na to, jak się zabezpieczymy. Najprostsze wyjście (od PHP 5.3) to refleksja. Ten post edytował Zyx 25.02.2011, 14:15:32 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 1 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie będę wspomniał już o wynalazkach w stylu tych, co zaproponował Eby, które też dokładają swoje idiotyzmy. Kod $helperCollection->getHelper('tag')->render(); I tutaj niestety Twoje rozwiązanie jest moim zdaniem mniej czytelne (jeśli jeszcze dodasz do tego dodatkowe parametry które były w poprzednim poście) - wiec (znów moim zdaniem) nie zyskałeś nic - ani czytelności kodu ani w zasadzie szybkości wykonywania... Mniejszą możliwość popełnienia błędu - co jest tylko teorią, gdyż patrząc na kod w jednym i drugim przypadku jesteś w stanie stwierdzić jak działa. Oczywiście twój zapis jest dłuższy jedynie o kilkanaście znaków co sprowadza się do wydłużenia kodu szablonu o 25% nie zyskując w praktyce nic. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:34 |