[PHP]Programowanie obiektowe w PHP, akcesory |
[PHP]Programowanie obiektowe w PHP, akcesory |
28.08.2011, 10:16:01
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 28.08.2011 Ostrzeżenie: (0%) |
Witam,
Czytam rozdział nt. programowania obiektowego w PHP i czegoś tu nie rozumiem. Mam taki przykład:
1. Skoro __get oraz __set to nazwy zastrzeżone, czy to oznacza że może istnieć tylko jedna para takich akcesorów dla klasy? 2. W jaki sposób mogę za pomocą jednej pary akcesorów przypisać wartości dla większej liczby atrybutów, np $atrybut1, $atrybut2, $atrybut3 ? Czy do tego służy konstrukcja ze zmienną $nazwa w powyższym przykładzie? 3. Dlaczego w powyższym przykładzie występuje zmienna $nazwa, skoro moim celem jest odczytanie lub ustawienie zmiennej $atrybut? 4. W książce jest przykład:
i w książce jest takie objaśnienie: "Instrukcja ta niejawnie wywoła funkcję __set() z wartością zmiennej $nazwa ustawioną na "atrybut" i z wartością równą 5". To skąd PHP wie, że zmiennej $nazwa ma przypisać zmienną $atrybut? Nie bardzo rozumiem tą konstrukcję. Z góry dzięki za odpowiedzi, PR. |
|
|
28.08.2011, 11:32:06
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) |
@Magic WWW Głupoty wypisujesz!
1. To, że __set() i __get() to nazwy zastrzeżone oznacza jedynie tyle, że silnik PHP wykorzystuje już te dwie metody. My na swoje potrzeby możemy te metody przeciążyć, co oznacza, że domyślne metody __set() i __get() zostaną zastąpione naszymi. Niemniej jednak, może istnieć tylko jedna para takich akcesorów dla jednej klasy. Pomiędzy tymi faktami nie ma żadnej zależności. 2. No właśnie tak:
przy czym pola (nazywane inaczej właściwościami klasy) muszą być prywatne lub chronione i przede wszystkim muszą w tej klasie być, ale o tym szerzej za chwilę. 3. Zmienna $nazwa określa nam nazwę pola (właściwości klasy), którą chcemy ustawić. Użycie:
spowoduje, że w obiekcie naszej klasy zostanie ustawione pole o nazwie 'zmienna' (@Magic WWW - nie obiekt). 4. Wyżej wspomniana nazwa "pobierana" jest z konstrukcji:
Operator -> jest nazywamy operatorem wyłuskania, a powyższy zapis oznacza "wyłuskaj/wydobądź z obiektu $a pole (właściwość) o nazwie atrybut i nadaj jej wartość 5". Zarówno ten kod, który nam podałeś (może źle przepisałeś z książki, albo autor książki popełnił błąd), jak i ten, który podał Magic WWW, w przypadku tak skonstruowanej klasy jest nieprawidłowy, a dokładniej w obu przypadkach nasze metody __set() i __get() nie są wykorzystywane w ogóle (@Magic WWW - w Twoim kodzie również). A teraz kod, który mam nadzieję wszystko objaśni (radzę przeczytać komentarze):
Nasze metody __set() i __get() są uruchamiane tylko wtedy, gdy chcemy ustawić i odczytać wartości pól (właściwości) publicznie niedostępnych. Co w praktyce oznacza, że mogą to być jedynie zmienne prywatne, a w szczególnych przypadkach również chronione. EDIT Poprawiłem pewne błędy składniowe wypowiedzi, aby wypowiedź brzmiała ściślej. Ten post edytował mortus 28.08.2011, 11:50:58 |
|
|
28.08.2011, 18:52:55
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
Ja bym dodał, że takie wykorzystanie jest raczej kiepskim pomysłem.
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 10:41 |