Intento evitar declarar funciones en el espacio de nombre global por completo. Las muy raras ocasiones en las que hacer esto, es cuando se añade implementaciones de entorno de usuario de las funciones que no están en mi versión de PHP, por ejemplo
if(false === function_exists('lcfirst'))
{
function lcfirst($str) { /* ... */}
}
funciones de este tipo podría ir en un compatibility.php que se incluiría en una archivo bootstrap, por lo que están disponibles en toda la aplicación y la verificación en function_exists
asegura que no tenga problemas una vez que la versión PHP tenga soporte nativo para la función.
Para todas las demás funciones, trataré de ver si primero no pueden ir a un objeto dedicado. Por lo general, las funciones "aleatorias" simplemente están fuera de lugar.Observe qué objetos usan las funciones de su utilidad y luego vea si puede mover los métodos allí. Tal vez haya una superclase esperando a salir. También vea Information Expert pattern.
Si no hay objetos, estos métodos pueden continuar, aún puede agruparlos en un módulo estático con el nombre Utils en un espacio de nombres único, para que no ocupen el espacio de nombres global. De esta manera, usted puede estar seguro de que no están chocando con otras funciones de terceros en el ámbito global.
Antes de 5.3, me agruparlos following the PEAR naming convention y anteponiendo los nombres de clase siguiendo la estructura de carpetas, por ejemplo, si el módulo estaba en com/mattmueller/utils.php
, tendrá que utilizar
class Com_MattMueller_Utils
{
public static function something($a, $b) { /* ... */ }
}
A partir de PHP5.3, nos ¡lo tengo verdadera namespaces y se puede hacer
namespace com\mattmueller\Utils;
class Utils
{
public static function something($a, $b) { /* ... */ }
}
en JavaScript que no tiene espacios de nombres, pero puede easily simulate them añadiendo las funciones a un objeto, por ejemplo,
// JavaScript
var com = (com) ? com : {};
com.mattmueller = {
'Utils': {
'something' : function(a,b) { /* ... */ }
}
};
Los marcos comunes generalmente implementan funciones para creating namespaces también.
¡Impresionante! Gracias por las ideas. Yah Me gustaría poder utilizar espacios de nombres de PHP pero mi alojamiento no tiene todavía 5,3. – Matt
@ Matt así, todavía se puede ir con el enfoque PERA Noté o simplemente utilizar un nombre de clase poco probable a chocar, como 'MMUtils' si encuentra el nombre de clase basadas nombre de dominio demasiado tiempo. – Gordon