Witam,
wiem że nazwa tematu kompletnie nic nie mówi, ale nie jestem w stanie w kilku słowach opisać problemu.
A więc w czym rzecz: zrobiłem kilka pluginów do skryptu MyBB, dzisiaj autorzy byli tak mili, że opublikowali nową wersję. Niestety kompletnie zmienili sposób realizacji uchwytów (hook'ów) z jakich mogły korzystać pluginy.
Pomijając wszystkie bebechy, zaczepianie się wygląda tak:

  1. $plugins->add_hook('nazwa_hooka','nazwa_naszej_funkcji');


Dane te trafiają potem do tablicy i w metodzie obiektu plugins są wywoływane tak:

  1. $returnargs = call_user_func_array($hook['function'], array(&$arguments));


Gdzie $hook['function'] to nazwa_naszej_funkcji, zaś $arguments w ogóle nas tu nie interesuje.
Tak było do tej pory i problemów nie było, można było używać obiektów np. tak:

  1. $plugins->add_hook('nazwa_hooka','obiektPluginu::metodaPluginu');


ewentualnie nie używając static tak:

  1. $plugins->hooks["nazwa_hooka"]["jakas_nasza_nazwa_dla_picu"] = array("function" => array($obiektPluginu, "nazwa_metody"));


Wtedy do call_user_func_array szła tablica, wszystko było ok.


Od dzisiaj jest natomiast tak:

  1. $func = $hook['function'];
  2. $returnargs = $func($arguments);


Czyli od razu stara się pobrać nazwę i ją uruchomić (tu ciekawostka - o sprawdzaniu czy funkcja istnieje oczywiście zapomnieli).
Abstrahując od samego skryptu forum, który nie jest tu najważniejszy chciałbym zapytać - czy przy takiej konstrukcji da się jakoś przekazywać metody z obiektów do wywołania?
Stosowane do tej pory kody nie działają, bo działać za bardzo nie mogą.

Sam support skryptu zasugerował, aby zrobić sobie oddzielną funkcję i z niej wywoływać metodę z obiektu:

  1. $plugins->add_hook('nazwa_hooka','moja_funkcja');
  2.  
  3. function moja_funkcja()
  4. {
  5. return obiektPluginu::metodaPluginu();
  6. }


Uznałem to jednak za czysty idiotyzm - po to robię każdy plugin jako osobną klasę (+ klasę dodatkowe o ile jest jakiś podział) aby był porządek, a nie abym miał potem jeszcze robić stos funkcji do obudowania tego obiektu w praktycznym użyciu.
Umieszczam w tym dziale, bo chodzi mi o samą możliwość wywoływania, a nie gotowy skrypt forum.