2010-12-07 21 views
6

Me pregunto cuál es la mejor manera de manejar hooks en una aplicación PHP
- entonces puedo insertar funcionalidad personalizada o 'plug in' sin modificar el cuerpo principal del código.La mejor manera de hacer hooks PHP

sé Wordpress cuenta con algo como esto. ¿Es realmente bien para hacer algo de la siguiente manera:

if (file_exists('file_before'){ include('file_before'); } 

print 'hello'; 

if (file_exists('file_after'){ include('file_after'); } 
+2

¿Necesita más información sobre el 'gancho' que espera? Lo anterior ** ** lógica de trabajo perfectamente – ajreal

+8

Ese código no funciona perfectamente, que se está perdiendo dos soportes de cierre – Ashley

+1

era sólo pseudocódigo para darle una idea de lo que estoy tratando de hacer – CJD

Respuesta

17

Cómo suelo hacer cosas cuando se trata de ganchos es crear una clase HookLoader que almacenará dos tipos de ganchos, PRE y POST. como PHP es un intérprete de subproceso único, no existiría DURING.

Tome este ejemplo:

$Hooks = new HookLoader(); 

$Hook->Run("PRE","database_connect"); 
$Database->Connect(); 
$Hook->Run("POST","database_connect"); 

cada gancho en el directorio de gancho debe ser el nombre de este modo:

name_pre_database_connect.hook.php 

archivos Hook se formatean así:

{name}_{type}_{event}.hook.php 

Este le permitirá crear una cantidad ilimitada de ganchos.

preferentemente Me gustaría hacer clase de enlace abstracta y estática, esto sólo puede ejecutar las llamadas de gancho dentro del objeto real, por lo tanto, la adición de nuevas bibliotecas se integrarían, siempre y cuando tengan la Hook::run("type","event");

+0

Gracias, suena como un buena solución – CJD

+0

Su bienvenida, espero que todo salga bien. – RobertPitt

0

MediaWiki tiene su propio mecanismo de definir ganchos en sus métodos y formas de registrar funciones a ser ejecutado por un punto dado de la ejecución ...

http://www.mediawiki.org/wiki/Hooks (podría ser un buen lugar para comenzar)

5

Por qué no usar "Observer Pattern " ¿para esto? Puedes agregar un Objeto a tu cuerpo y disparar las acciones del hold class adjunto. Si desea refinarlo, puede crear un método específico dentro de cada objeto Observer que defina la etapa de la ejecución. Es probable que esto sea más programación al principio, pero ofrece una interfaz muy limpia para agregar más funciones a sus clases.

Por ejemplo, este IBM dev article (por cierto, vale la pena leerlo en su conjunto) debería darle una buena impresión de este patrón.

Cuestiones relacionadas