&$this en WordPress add_action devolución de llamada

2 minutos de lectura

Avatar de usuario de Yumecosmos
yumecosmos

Solo me estoy mojando los pies en WordPress y estoy tratando de escribir un complemento muy simple usando técnicas de programación orientada a objetos. He estado siguiendo este tutorial: http://www.yaconiello.com/blog/como-escribir-wordpress-plugin/ . Hasta ahora siento que entiendo la mayor parte de lo que está pasando, pero estoy un poco desconcertado por afirmaciones como esta:

add_action('init', array(&$this, 'init')); 

Habiendo leído la documentación sobre Add_action() de WordPress y Llamables de PHP, deduzco que el segundo argumento es un método de una instancia de clase. Pero no entiendo porque $this tiene que ser pasado por referencia.

Encontré esta nota en los documentos de PHP sobre llamadas que sospecho que pueden tener algo que ver con eso, pero todavía me cuesta entender cuál es la diferencia:

Nota: en PHP 4, era necesario usar una referencia para crear una devolución de llamada que apuntara al objeto real, y no a una copia del mismo. Para obtener más detalles, consulte Referencias explicadas.

Si tengo PHP 5, ¿estoy seguro simplemente usando array($this,'init')?

Posiblemente relacionado: add_action en wordpress usando OOP?

Sí, es seguro usar solo array($this, 'init');.

Lo que esto es en realidad es un “invocable” en PHP. Se invocará usando call_user_func() o call_user_func_array() (internamente dentro del add_action método).

Descripción oficial de PHP de este tipo de llamada:

Un método de un objeto instanciado se pasa como una matriz que contiene un objeto en el índice 0 y el nombre del método en el índice 1.

Puedes leer más sobre los callables aquí.

  • ¡OK gracias! Entiendo que es un invocable. En realidad, me vinculé a esa página en mi pregunta;) Aunque me referí a ella como una devolución de llamada… supongo que será mejor que vaya a editar. Solo tenía una curiosidad académica sobre la diferencia entre $this y &$this en este contexto. Wow, esa fue una oración confusa.

    – Yumecosmos

    14 de febrero de 2014 a las 14:10

¿Ha sido útil esta solución?