Rejestrowanie metod klas jako haków zwrotnych

16

Nie jestem pewien, czy zrobiłem to poprawnie.

Tak jak rozumiem:

jeśli mam klasę foo i statyczny pasek metod, mogę zarejestrować to jako wywołanie zwrotne, przekazując tablicę array("foo","bar")jako nazwę funkcji.

Jeśli mam instancję klasy w $ foo i chcę wywołać pasek metod, przekazuję tablicę array($foo,'bar').

Gdybym musiał zarejestrować akcję w samej klasie, czy zadziałałoby array($this,'bar')?

Daniel Chatfield
źródło
3
Czy test nie byłby szybszy niż zadawanie pytania? ;) Tak, możesz to zrobić.
fuxia
2
Test może pomóc, ale czasami też szukasz opinii.
Wydaje

Odpowiedzi:

11

Gdybym musiał zarejestrować akcję w samej klasie, czy zadziałałoby array($this, 'bar')?

Tak to działa. $thisDokumenty odnoszą się do konkretnego wystąpienia potrzebnego do wywołania zwrotnego . Dokładnie tak jak w $foopodanym przykładzie. Po prostu $thisjest to trochę bardziej wyjątkowe, ale reprezentuje w zasadzie to samo i działa bezbłędnie z wywołaniami zwrotnymi w PHP.

Dodatkowy:

jeśli mam klasę foo i statyczny pasek metod, mogę zarejestrować to jako wywołanie zwrotne, przekazując tablicę array("foo","bar")jako nazwę funkcji.

Tak, możesz to zrobić, dla funkcji statycznej możesz również napisać ją jako ciąg zamiast tablicy: foo::barpatrz Dokumenty wywołań zwrotnych . Może się przydać.

hakre
źródło
1

W przypadku metod statycznych możesz to również zrobić:

['foo','bar'] 

gdy następujący ciąg daje niezdefiniowanej stałej „bar” klasy :

foo::bar

przykład - przy określaniu $ call_callback dla wp_add_dashboard_widget

William Turrell
źródło