¿Cuáles son algunas soluciones prácticas de espacio de nombres PHP?

Este es el escenario (es un poco específico, pero lo suficientemente general como para aplicarse a cualquier php lib):

WordPress 3.2.1 o versiones anteriores (base de código PHP, PHP5 con y sin espaciado de nombres disponible) ... He creado una pequeña biblioteca PHP con algunos nombres de clases (WPAlchemy_MetaBox, WPAlchemy_MediaAccess) ... los desarrolladores han comenzado a use las clases en complementos / temas de los cuales WordPress puede tener muchos instalados (en el mismo entorno), por lo que es probable que dos o más complementos usen la biblioteca (la colisión puede ocurrir con los nombres de las clases, obviamente)

Actualmente estoy pensando que cada versión podría tener un nombre de clase único (con el número de versión o algo así) ... Podría resumir esto un poco con un cargador simple de algún tipo (para simplificar).

Me gustaría obtener algunas de las mejores prácticas para resolver lo anterior.

  • prevenir colisiones de nombres
  • Permitir que los desarrolladores utilicen una versión específica si lo desean.

Si hay otras publicaciones de SO que resuelven este problema, hágamelo saber. Además, no dude en volver a redactar la pregunta con objetivos adicionales de viñetas.

preguntado el 08 de noviembre de 11 a las 19:11

1 Respuestas

Para evitar colisiones, utilice un cargador automático (consulte spl_autoload_register). Entonces, si comparte la biblioteca y cada participante usa un autocargador, la colisión de nombres de clase (redeclare el error fatal de la clase) ya no sucederá.

Esto no resuelve el problema de la versión (por ejemplo, tener diferentes clases de la misma familia pero con diferentes versiones).

Una solución simple (combinada con el cargador automático) es ofrecer la biblioteca como complemento. Cada vez que se actualice la biblioteca, actualice el complemento. El complemento ofrece solo el cargador automático y las clases.

Otros complementos que quieran hacer uso de la biblioteca, deben hacer que su complemento de biblioteca sea una dependencia, por ejemplo, verificándolo y diciéndole al usuario que lo instale si no está disponible o que lo instale automáticamente.

Si ofrece un complemento de muestra que hace esto para una demostración (SDK), creo que muchas de las bibliotecas que los usuarios adoptarán.

respondido 09 nov., 11:00

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.