Manual de WP Core> Estándares de codificación PHP> Convenciones de nomenclatura sugiere lo siguiente para nombrar archivos con clases:
Los nombres de los archivos de clase deben basarse en el nombre de la clase con
class-
antepuestos y los guiones bajos en el nombre de la clase reemplazados por guiones, por ejemplo, seWP_Error
convierten en:class-wp-error.php
Si bien la redacción de la sección está destinada principalmente al uso principal , el estilo de codificación en general se aplica (y en mi opinión) se aplica al código WP de terceros.
Sin embargo, dado que el núcleo no admite espacios de nombres (PHP 5.2, ugh), este no es el caso.
¿Cuál es la forma práctica de hacerlo desde la perspectiva de la conveniencia del desarrollador? ¿Soporte de cargadores automáticos?
Pude ver múltiples formas alternativas:
- ignorando el espacio de nombres por completo
- incluyendo espacio de nombres en el nombre del archivo
- usando espacios de nombres como niveles de carpeta
- usando un esquema de nombres alternativo por completo, como PSR
fuente
Respuestas:
Primero, ignore el
class-
prefijo. Esto proviene del enfoque de código de procedimiento puro de WordPress, las clases se usan como contenedores para código de procedimiento, no para objetos reales, y la mayoría de los archivos no contienen clases en absoluto o clases y otro código juntos. No tiene sentido cuando todos sus archivos contienen solo una clase y nada más.Si siguieras ese patrón, tendrías que usar
interface-foo.php
ytrait-bar.php
. Eso no solo parece ridículo, sino que hace que la carga automática sea más difícil de lo necesario.La forma más fácil de separar los espacios de nombres y los nombres de clase / interfaz / rasgo es (según mi experiencia) asignando espacios de nombres a nombres de directorio y nombres de clases a nombres de archivo. Esto hace que sea muy fácil para asignar la clase solicitada a una estructura de archivo dado en el cargador automático: Sólo convertir
\
a/
, append.php
y cargue el archivo.Esto también facilita el almacenamiento en caché de las búsquedas: para cada directorio / espacio de nombres, puede buscar todos los archivos existentes la primera vez que se solicita ese directorio, y para llamadas posteriores puede tomar la reutilización de esa lista de nombres de archivos sin preguntar
file_exists()
cada vez .fuente
He hecho una clase para este requisito, compatible con PSR-4 y siguiendo los estándares de codificación de Wordpress.
Puede llegar aquí: https://github.com/pablo-pacheco/wp-namespace-autoloader
La explicación está ahí, pero básicamente es una dependencia del compositor. Solo tienes que requerirlo en tu proyecto:
Y luego llama a la clase
fuente
Generalmente voy con la segunda mitad de sus opciones:
Si usa Composer para registrar un autocargador PSR-4, puede mantenerse cerca de las convenciones de nomenclatura de WP. Los espacios de nombres asignados a carpetas que pueden contener guiones bajos con archivos denominados como la clase que también pueden contener guiones bajos. Me gusta:
Cuando WP pasa a php 5.3+ (tiene que suceder eventualmente, ¿no?) Las pautas deben actualizarse. Dado que PSR-0 ya está en desuso, se debe recomendar al menos PSR-4 si no es necesario.
fuente
La solución de pablo-sg-pacheco funcionó para mí, cargando automáticamente confiando en el compositor pero compatible con los estándares de codificación de WordPress, sin embargo, la url para el repositorio de Github es:
https://github.com/pablo-sg-pacheco/wp-namespace-autoloader
y el nombre del paquete es:
Finalmente, también deberá agregar lo siguiente a su composer.json porque el paquete no está disponible en packagist:
fuente