![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 22.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chciałbym się dowiedzieć czy jest możliwe w php coś takiego. Mam dwie klasy.
W klasie pierwsza mam pola prywatne. Czy jest możliwe aby z klasy drugiej i tylko z tej klasy była możliwość zapisu pól prywatnych klasy pierwsza? Dziedziczenie raczej nie może być bo te klasy nie maja takiej relacji ze sobą. Ten post edytował klinski 16.09.2008, 08:07:07 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Cytat Lecz choćby przyszło tysiąc atletów I każdy zjadłby tysiąc kotletów, I każdy nie wiem jak się natężał, To nie udźwigną - taki to ciężar! Innymi słowy - nie da się. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Dziedziczenie raczej nie może być bo te klasy nie maja takiej relacji ze sobą. A co by to dało? Przeciesz mówisz o polach prywatnych.Jedyne co możesz zrobić to obejcie za pomoca metody magicznej _set(), ale to ... głupota. Po to robi się pola prywatne żeby były prywatne. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 22.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
No tak z dziedziczeniem dałem ciała. Wiem, że po są prywatne aby nikt z zewnątrz nie mógł się do nich dostać, ale myślałem że może jest jakiś mechanizm w php, który określa ze inna klasa może modyfikować pola prywatne. No cóż trudno, nie ma to nie ma. Dzięki za odpowiedź.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
http://www.php.net/manual/pl/language.oop5.visibility.php
Poczytaj o "protected" -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Nie protected!
Przeciez masz metody! Uzyj ich jako metody dostepowe do tych zmiennych prywatnych. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dokładnie tak jak pisze ~dr_bonzo. Napisz sobie własne tzw. settery i gettery, przykładowo:
Aczkolwiek to nie rozwiązuje Twojego problemu z pierwszego postu. Możesz przekazywać źródło wywołania metody i na tej podstawie (zwykły warunek) określić czy dany obiekt (z którego nadeszło żądanie) ma prawo do wykonania danej operacji.
Ten post edytował phpion 16.09.2008, 10:00:54 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@phpion, ja bym nie uzależniał tej klasy od źródła z którego przychodzi, tylko od Tego co składuje:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 22.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam, nie doczytałem - cały dzień tak dzisiaj mam :/ Nie, nie rozwiąże to Twojego problemu.
Mógłbyś napisać Twój konkretny przypadek użycia? Bo może dałoby się to w inny sposób rozwiązać. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czy jest możliwe aby z klasy drugiej i tylko z tej klasy była możliwość zapisu pól prywatnych klasy pierwsza? W PHP nie ma "friend" czy jak to bylo z C++. W Javie masz okreslnik zasiegu "package" (tzn piszesz definicje bez niego) przez co wszystkie klasy z danego pakiegu (namespace) maja dostep do tych zmiennych. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 22.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie mam konkretnego przypadku, tak tylko zastanawiałem się czy jest taka możliwość w php. Dzięki wszystkim.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 24 Pomógł: 3 Dołączył: 25.08.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jest, ale w PHP5.3:
http://wortal.php.pl/wortal/artykuly/php/p..._w_php6_czesc_1 szukaj: ReflectionProperty::setAccessible |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 11:44 |