![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 10.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym na jakiś czas zablokować dostęp do klasy "engine" lub zablokować dostęp do tej klasy, klasie "module". Nie chcę by klasa "module" czytała/modyfikowała/zapisywała dane klasy "engine". Inne klasy takie jak "template" muszą mieć do danych "engine" dostęp.
Ktoś wie jak coś takiego rozwiązać? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Wewnatrz kalsy, hmmm
Mysle ze jest pare rozwiazan ![]() ![]() + mala edycja ![]() Wiec ![]() http://wiki.php.pl/index.php/Singleton
Mozna np tak probowac;) |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Chyba prędzej tak:
Jestem tylko ciekaw czy jest możliwość wywołania jakieś funkcji przy każdym dostępie do klasy. Coś jak __get, __set i __call, tylko musiałoby działać dla wszystkich przypadków, a nie tylko tych niezdefiniowanych. Ten post edytował matid 19.05.2005, 18:01:42 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 10.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Obiekt klasy "engine" utworzony przez singleton już istnieje. Chciałbym zablokować jakiejś klasie modyfikowanie danych tego obiektu ("engine"), korzystania z metod itp.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(tuner @ 2005-05-19 21:55:50) Obiekt klasy "engine" utworzony przez singleton już istnieje. Chciałbym zablokować jakiejś klasie modyfikowanie danych tego obiektu ("engine"), korzystania z metod itp. No właśnie tego tyczyła 2 część mojej wypowiedzi, ale po wnikliwym myśleniu (czyt. google) stwierdzam, że najprawdopodobniej jest to niemożliwe, no chyba że na początku każdej funkcji będziesz sprawdzał, czy ma zostać wywołana czy nie i zastosujesz hermetyzację danych (czyli metody get, set, np. getName, setName, getId, setId, itp., a w nich wewnętrznie będziesz sprawdzał, czy można funkcję wywołać). Innego wyjścia nie widzę. Ten post edytował matid 19.05.2005, 21:06:42 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 10.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Tez myslalem o takim sposobie, ale bylby niewygodny.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Dobrego sposobu nie ma, i to nie tylko w php, ale w większości języków. Tobie potrzebne są aspekty, a php takowych nie ma.
Ale w php można zrobić inną rzecz: dekoratora na rzeczywistą klasę engine, który miałby tylko jedną metodę: __call i wywoływałby przezroczyście odpowiednią metodę enginu, sprawdzając uprzednio (debug_backtrace), czy klasa wywołująca ma do tego prawo. Nie jest to wydajne i eleganckie, ale jest możliwe. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 10.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Bo mam pewien problem. Klika obiektów pochodnych od klasy "module" może pracować jednocześnie (modułem jest księga gości, menu, sonda itp.). Mogą zatem każdy po kolei zmienić wygląd Theme'u, tytuł strony itd. i w takim razie to co wyświetli się na ekranie może być wielką zagadką. Chciałem wprowadzić prawa dla poszczególnych modułów - te z największymi mogły by modyfikować, te z mniejszymi nie.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem kazdy modul powinien ingerowac tylko w obszar mu przeznaczony -- tzn menu -- tworzy tylko menu, nie rusza naglowka, tytulu itd, tzn. szablon menu powinien zawierac tylko menu.
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 10.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Rzeczywiście moduł menu nie ingeruje w nic. Ale np. moduł infopages zmienia nazwę strony na "Strona >> Wyświetlony artykuł" jednocześnie coś tam jeszcze mogąć zmienić. I jeśli będzie kilka takich modyfikujących modułów to będzie hell.
|
|
|
![]()
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%) ![]() ![]() |
No to niech te moduly przekazuja do jadra (lub jakiegos innego modulu odpowiedzialnego tylko za tytul) systemu swoje skladowe tytulu -- jadro utworzy z nich caly tytul: np PAGE.pl > Artykul: blabla | Wyniki ankiety "jakies pytanie"...
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 10.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 20:03 |