Registrar métodos de clase como devoluciones de llamada de enlace

16

No estoy seguro de haberlo hecho correctamente.

Según lo entiendo:

si tengo una clase foo y una barra de método estático, puedo registrarla como devolución de llamada pasando la matriz array("foo","bar")como el nombre de la función.

Si tengo una instancia de una clase en $ foo y quiero llamar a la barra de métodos, paso la matriz array($foo,'bar').

Si necesito registrar una acción dentro de la clase, ¿funcionaría array($this,'bar')?

Daniel Chatfield
fuente
3
¿No sería una prueba más rápida que hacer la pregunta? ;) Sí, usted puede hacer esto.
fuxia
2
Una prueba puede ayudar, pero a veces también busca comentarios. Creo que es bien pedir realidad la pregunta, y no hay esta regla, cuestionando la motivación PO ... :)
hakre

Respuestas:

11

Si necesito registrar una acción dentro de la clase, ¿funcionaría array($this, 'bar')?

Si, funciona. $thisDocs se refiere a la instancia concreta necesaria para la devolución de llamada . Eso es exactamente como el $fooejemplo que das. Es solo que $thises un poco más especial, pero representa básicamente lo mismo y funciona perfectamente con devoluciones de llamada en PHP.

Adicional:

si tengo una clase foo y una barra de método estático, puedo registrarla como devolución de llamada pasando la matriz array("foo","bar")como el nombre de la función.

Sí, puede hacerlo, para la función estática, también puede escribirlo como una cadena en lugar de la matriz: foo::barconsulte Documentos de devolución de llamada . Podría ser útil.

hakre
fuente
1

Para métodos estáticos también puede hacer esto:

['foo','bar'] 

cuando lo siguiente le da a la clase indefinida constante 'barra' :

foo::bar

ejemplo: al especificar $ control_callback para wp_add_dashboard_widget

William Turrell
fuente