Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> __call i dynamiczne metody
Endzio
post
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:
  1. $plug = new Plugin();
  2. echo $plug->panel_bbcode();

  1. class Plugin
  2. {
  3. function __call($plugin, $arguments)
  4. {
  5. // Tutaj powinno być include, lub file_get_contents zamiast linijki poniżej
  6. $this->{$plugin} = function ($x, $y, $z) {return 'Plugin '.$plugin.' został wywołany';};
  7.  
  8. // Tutaj powinno być definiowanie metody
  9.  
  10. return call_user_func_array(array($this, $plugin), $arguments);
  11. }
  12. }


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
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...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 04:35