¿Qué sucede cuando dos complementos tienen la misma clase de terceros incluida en ellos?

4

Estoy creando un complemento que utiliza Stripe para el procesamiento de pagos. He incluido la biblioteca PHP de Stripe en mi complemento y todo funciona muy bien. Pero, ¿y si alguien más crea un complemento que también usa Stripe ... o peor, una versión anterior de Stripe que no es compatible con la mía? Parece que podría haber conflictos si alguien hubiera activado ambos complementos al mismo tiempo.

¿Necesito espacio de nombres en las clases de Stripe? ¿Es eso aconsejable? Me imagino que ser una pesadilla de mantenimiento si alguna vez quiero actualizar a una versión más nueva de la biblioteca de Stripe.

Estoy totalmente bien haciendo eso, pero quiero asegurarme de que estoy siguiendo las mejores prácticas aquí.

Gracias! Tony

    
pregunta Tony DeStefano 25.02.2016 - 00:15

2 respuestas

2

Seguí adelante y escribí el nombre de Stripe. Todo funcionó muy bien. Y ahora no tengo que preocuparme por que la biblioteca Stripe de nadie más arruine mis cosas.

Original:

namespace Stripe;

Nuevo:

namespace MyRadNamespace\Stripe;

Si alguien está interesado en ver cómo se hace, no dude en navegar por mi repositorio:

enlace

¡Salud!

    
respondido por el Tony DeStefano 26.02.2016 - 23:57
0

Mientras miraba a través de la el / la enlace / enlace adjunto en la respuesta, noté la increíble cantidad de requice de declaraciones en un solo archivo. El problema principal es que al repositorio le falta un cargador automático que se pueda optimizar en todo el proyecto y que el complemento incluya todos esos archivos, no importa si es necesario o no.

Cuando empiece a usar Composer para administrar los archivos adjuntos, encontrará que crea un archivo autoload.php para cada paquete único que escribe (o recupera). Luego puede crear proyectos completos usando Composer como administrador de paquetes, lo cual, como un efecto secundario agradable, también crea un archivo centralizado autoload.php en lugar de un autoloader por paquete incluido ( plugin / tema / etc). Además de este único cargador automático, Composer también crea un mapa "Clase > Archivo" como "caché" para evitar tantas lecturas de disco como sea posible, lo que mantendrá las búsquedas de clase lo más rápido posible.

Esto evitará tener que espacios de nombres en el espacio de nombres de las clases. Lo que significa que, en caso de que varios paquetes tengan un archivo composer.json , solo habrá una ubicación donde esos paquetes de proveedores obtener guardado (por lo tanto, ahorrar ancho de banda y espacio en disco) y recuperarlo. Incluso si uno no ignoró los archivos del proveedor en un paquete controlado por VCS, ya no es necesario cargarlos.

# Before in Package (A)
$stripe = new \MyRadNamespace\Stripe;
# Before in Package (B)
$stripe = new \MyFunkyNamespace\Stripe;

# After – anywhere!
$stripe = new \Stripe;

En caso de que un complemento o tema aún no sea compatible con Composer, simplemente puede obtenerlo a través del WPackagist proxy / mirror service.

Para obtener un inicio rápido con el administrador de paquetes de Composer, sugiero usar wecodemore / wpstarter por @gmazzap - documenta aquí .

    
respondido por el kaiser 06.03.2016 - 13:04

Lea otras preguntas en las etiquetas