Registrieren von Klassenmethoden als Hook-Rückrufe


16

Ich bin mir nicht sicher, ob ich das richtig gemacht habe.

So wie ich es verstehe:

Wenn ich eine Klasse foo und eine statische Methodenleiste habe, kann ich dies als Rückruf registrieren, indem ich das Array array("foo","bar")als Funktionsnamen übergebe.

Wenn ich eine Instanz einer Klasse in $ foo habe und die Methodenleiste aufrufen möchte, übergebe ich das Array array($foo,'bar').

Wenn ich eine Aktion innerhalb der Klasse selbst registrieren muss, funktioniert das dann array($this,'bar')?


3
Wäre ein Test nicht schneller, als die Frage zu stellen? ;) Ja, das kannst du.
fuxia

2
Ein Test kann helfen, aber manchmal sucht man auch nach Feedback. Ich denke, es ist in Ordnung, die Frage tatsächlich zu stellen, und es gibt diese Regel, die die Motivation des OP in Frage stellt ... :)
hakre

Antworten:


11

Wenn ich eine Aktion innerhalb der Klasse selbst registrieren muss, funktioniert das dann array($this, 'bar')?

Ja es funktioniert. $thisDocs bezieht sich auf die konkrete Instanz, die für den Rückruf benötigt wird . Das ist genau wie das $fooBeispiel, das Sie geben. Es ist nur $thisetwas spezieller, aber es stellt im Grunde das Gleiche dar und es funktioniert einwandfrei mit Rückrufen in PHP.

Zusätzlich:

Wenn ich eine Klasse foo und eine statische Methodenleiste habe, kann ich dies als Rückruf registrieren, indem ich das Array array("foo","bar")als Funktionsnamen übergebe.

Ja, Sie können dies tun. Für die statische Funktion können Sie sie auch als Zeichenfolge anstelle des Arrays schreiben: foo::barsiehe Callbacks- Dokumentation . Könnte praktisch sein.


1

Für statische Methoden können Sie dies auch tun:

['foo','bar'] 

wenn Undefined class constant 'bar' ergibt :

foo::bar

Beispiel - bei der Angabe von $ control_callback für wp_add_dashboard_widget

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.