![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 10.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Jestem w trakcie pisania klasy do wywoływania pluginów, wpadłem na ciekawy pomysł (pewnie nie tylko ja), aby odwoływać się do nich przez metody. Dla przykładu, plugin panel_bbcode, który wyświetla ikony do wprowadzania tagów BBCode:
Sposób ten (podobno) działa w PHP 5.3, ale używam wersji 5.2 Czy można takie coś zrobić w PHP 5.2? Ten post edytował Endzio 16.01.2010, 22:03:57 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1) Sam pomysł nie wydaje mi się dobry... zawsze cały plugin wpakujesz do jednej metody? IMO dużo lepiej byłoby dla każdego utworzyć osobną klasę, która dziedziczyła by po jakiejś innej (abstrakcyjnej) dającej jakieś tam podstawowe narzędzia wspólne w obrębie wszystkich pluginów.
2) W PHP przed 5.3, nie zadziała Ci linijka: $this->{$plugin}..., ponieważ nie ma obsługi funkcji anonimowych. Ale mógłbyś to chyba ominąć przez create_function (nie jestem jednak pewien czy uda się utworzyć w ten sposób metodę dla obiektu - raczej nie. W każdym bądź razie, źle kombinujesz... |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 10.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
W każdym bądź razie, źle kombinujesz... Lubię prostotę w kodzie. Podoba mi się takie rozwiązanie. W obojętnie jakim miejscu wprowadzam i jeśli istnieje taki plugin to "includuje" go (jeśli wcześniej metoda nie została utworzona), rejestruje metodę i wyświetla zawartość, a jeśli nie istnieje to zwraca false. // Edytka Po przemyśleniu doszedłem do wniosku, że masz rację, pluginy mogą być klasami, do których bym się odwoływał podobnie:
a funkcja __call by wyglądała tak:
// Edytka 2 Jednak w ten sposób nie działa. Aby zadziałało należy wpisać:
Przy wywołaniu $plug->panel->show() PHP nie korzysta z metody __call ![]() Czy istnieje możliwość pominięcia pierwszej linijki? // Edytka 3 Zadziałało, ale w przypadku, gdy plugin nie istnieje PHP wyrzuca błąd Cytat Fatal error: Call to a member function show() on a non-object Sugestie mile widziane ![]() Ten post edytował Endzio 17.01.2010, 18:33:44 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
W metodzie __call sprawdzaj najpierw czy istnieje klasa o danej nazwie, a jeśli nie istnieje przypisz do danej zmiennej obiekt klasy, która też będzie miała metodę __call z tym, że ta metoda będzie zwracała np. wyjątek albo pustego stringa - w zależności od potrzeb.
Jeśli z kolei interesuje Cie uniwersalne rozwiązanie tego typu zagadnień to proponuje zapoznać się najpierw z: DTO – wprowadzenie i charakterystyka a potem DTO – zastosowanie – Konfiguracja -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2024 - 01:49 |