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:
$plugins->add_hook('nazwa_hooka','nazwa_naszej_funkcji');
Dane te trafiają potem do tablicy i w metodzie obiektu plugins są wywoływane tak:
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:
$plugins->add_hook('nazwa_hooka','obiektPluginu::metodaPluginu');
ewentualnie nie używając static tak:
Wtedy do call_user_func_array szła tablica, wszystko było ok.
Od dzisiaj jest natomiast tak:
$func = $hook['function']; $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:
$plugins->add_hook('nazwa_hooka','moja_funkcja'); function moja_funkcja() { return obiektPluginu::metodaPluginu(); }
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.