Recientemente comencé a usar espacios de nombres en PHP. Cuando los vi por primera vez, pensé que su sintaxis era fea y que nunca los usaría. Sin embargo, creé un cargador automático (spl_autoload_register) que hace que nunca tenga que volver a escribir una declaración de inclusión / solicitud.
Me gustan los espacios de nombres, pero ¿hay algún beneficio objetivo sobre las declaraciones de incluir / requerir, o son exactamente el mismo método para lograr el mismo objetivo?
new \Vendor\Namespace\Class()
sin una declaración require anteriormente en el método o clase.Respuestas:
Los espacios de nombres no son solo para clases de carga automática. También evitan conflictos de nombres. De hecho, ese es su propósito principal.
Supongamos que tiene un proyecto que necesita una clase llamada
User
, para almacenar información sobre los usuarios de su aplicación, pero un complemento también usa una clase (diferente) nombradaUser
para almacenar información. Los espacios de nombres le permiten crear su clase dentro de un espacio de nombres (por ejemplo,MyApp
) y dejar que el complemento use otro espacio de nombres (por ejemplo,CoolPlugin
). El código dentro delMyApp
espacio solo puede referirse aUser
(por ejemplo,new User();
), y también puede codificar en elCoolPlugin
espacio; cada uno obtendrá el resultado esperado. Cuando necesite usar código de otro espacio de nombres, simplemente prefijelo. Por ejemplo, el código en elCoolPlugin
espacio puede acceder a laUser
clase aMyApp
través denew \MyApp\User();
La alternativa es que cada clase necesita un nombre complejo en todas partes , como
class MyApp_User
yclass CoolPlugin_User
. Los espacios de nombres le permiten simplificar las cosas la mayor parte del tiempo y evitar conflictos de nombres todo el tiempo.Editar: Para responder a la pregunta, "¿Hay alguna diferencia de rendimiento entre los dos?"
No significativo, no. No lo he comparado, pero probablemente haya una diferencia en el nivel de nanosegundos. Dicho esto, sacrificar la calidad del código por ajustes de rendimiento súper pequeños no es una buena estrategia, por lo que debe usar espacios de nombres independientemente. Para puntos de referencia de tipos similares de problemas, consulte PHPbench.com y esta respuesta de StackOverflow .
Su código debe ser increíblemente estricto e increíblemente sensible al tiempo (piense en el comercio de alta frecuencia o la gestión de reacciones nucleares) antes de que deba preocuparse por la microoptimización en este tipo de contexto. Si realmente es tan urgente, probablemente debería estar codificando en C o incluso ensamblado , no en lenguajes interpretados como PHP.
fuente