2010-02-07 7 views
9

¿Cómo organizan todas sus funciones aleatorias para mejorar la funcionalidad de un idioma fuera de las clases de OOP (funciones globales)?Prácticas elegantes en "funciones de utilidad aleatorias"

He visto bibliotecas, pero todavía no estoy convencido de que sea una buena solución, especialmente si no tienes suficientes funciones. Estoy específicamente interesado en cómo las personas organizan funciones PHP y JavaScript al azar.

Respuesta

7

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.

+1

¡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

+0

@ 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

4

Por lo general, reservo functions.php o common.php para todas mis funciones raras que deberían haber sido idealmente en PHP en primer lugar. (Es decir, para nada específico de mi proyecto).

Esto puede ser algo así como hacer que una función estándar se extienda a arreglos multidimensionales, o cualquier otra cosa que se ajuste a esa categoría.

Cuando cambio proyectos, solo copio ese archivo en el siguiente proyecto y puede ir fácilmente a donde sea. Luego solo me aseguro de que esté cargado en mi script de carga, y he ampliado el idioma correctamente.


cosas específicas del proyecto, guardo una clase Misc que contiene las llamadas a funciones muy raras que son, al mismo tiempo, un proyecto específico.


Para las funciones de Javascript, que se puede imaginar se puede aplicar la misma cosa. Si desea crear un archivo de tipo functions.js o global.js, probablemente pueda usar la misma lógica.

1

Para Javascript, he encontrado que la primera opción debería ser integrar mis utilidades en jQuery. Es tan fácil como escribir cualquier otro tipo de función, y cuando las cosas se vuelven más complicadas, es genial poder aprovechar el paradigma que jQuery impone sobre todo (y sobre todo el otro código específico de mi página en el sitio).

+0

Añado que también se puede extender el prototipo construido en objetos como matriz, así – Goyuix

+0

@Goyuix - en general la ampliación de los objetos nativos está mal visto. – scunliffe

+0

@scunliffe dicen que a los chicos del prototipo :-) – Pointy

2

Siempre uso una clase de ayuda donde puedo poner todo mi código que no es de OOP, jaja. Quiero decir que es el apoyo de los ayudantes que siguen siendo OO y tienen métodos en lugar de funciones, con la ventaja de que puedes organizar tus funciones en diferentes asistentes. Al igual que StringHelper, DBHelper, etc.

+0

Yo también (para PHP, por lo menos). Tengo una carpeta llamada Util, con archivos de clase para StringUtil, ArrayUtil, etc., que están llenos de métodos estáticos. Combinado con un buen mecanismo de carga automática, funciona muy bien. – grossvogel

1

En JavaScript, hacer un nuevo archivo y agruparlos bajo un objeto

global.js:

/* Function definitions */ 
var myFunctions = new Object(); 
myFunctions.func = function() { 
    alert("hello"); 
} 

La misma idea se puede utilizar para PHP. Con esto, no necesita preocuparse por los conflictos al nombrar las convenciones cuando su programa crezca.

Cuestiones relacionadas