2011-08-29 20 views
6

Tengo algunas funciones de uso general que realmente no tienen sentido en ninguna clase como métodos estáticos. Me gustaría encapsularlos bajo un espacio de nombres para que no haya conflictos con las funciones definidas en el ámbito global. Para mis clases de espacio de nombres, sigo el patrón ampliamente adoptado donde una clase como \ My \ Namespaced \ MyClass existe en My/Namespaced/MyClass.php en la ruta include.Prácticas recomendadas de funciones de espacio PHP

¿Existe una mejor práctica para el lugar donde se deben ubicar las funciones de espacio de nombres? Ahora mismo los estoy poniendo en "functions.php" dentro del directorio que contiene clases bajo el mismo espacio de nombres. Por ejemplo \ My \ Namespaced \ myFunction existe en My/Namespaced/functions.php.

Además, ¿hay alguna manera de cargar automáticamente estas funciones de la misma manera que las clases se cargan automáticamente?

Respuesta

5

Además, ¿hay alguna forma de cargar automáticamente estas funciones de la misma manera que las clases se cargan automáticamente?

No

para las funciones globales, pero si ...

¿Hay una mejor práctica para las funciones de espacios de nombres donde se deben colocar?

Considero que usar objetos es una "mejor práctica", sin embargo, todos sabemos que no es totalmente cierto.

No hay carga automática para funciones globales, puede encapsular funciones en clases como funciones estáticas y luego el autocargador entrará en acción. Así que eso podría ser una sugerencia, sin embargo, debe tener en claro las implicaciones que esas funciones estáticas tienen para su diseño general.

Por decirlo así: si está de acuerdo con las funciones globales, entonces puede estar bien con las funciones de clase estáticas globales. Se romperán si cambias el nombre de una clase (como con cualquier nombre de función global); sin embargo, has creado algo que puede autocargar y es compatible con tu esquema de nombres de archivos.

Editar: Cuando escribo mundial, quiero decir el nombre completo de una función, que es el que a partir de \. Ver Name resolution rulesDocs.

+0

Nada de esto es global, está usando espacios de nombres PHP 5.3. – igorw

+0

@igorw: ¿Qué quieres decir? ¿Qué no es global? Simplemente no lo entiendo, no dude en dar más detalles. – hakre

+0

tal vez no estoy obteniendo lo que quiere decir con 'global'. Todo lo que digo es que las funciones en cuestión no están en el espacio de nombres global. – igorw

2

Lamentablemente, no hay carga automática para las funciones (porque los desarrolladores PHP lo decidieron ...), así que debe pensar en cómo se incluyen los archivos de función. Por ejemplo, puede usar un funcional para eso (como importFunction($namespace); Simplemente correlacionará el espacio de nombre con el nombre de archivo e incluirá el archivo), o puede incluir cada archivo, que contiene funciones a la vez (al inicio o similar).

Cuestiones relacionadas