2010-11-13 17 views
6

Estoy tratando de encontrar una guía sobre las convenciones de estructura de carpetas/archivos PHP.Folder/File Structure Conventions?

Estoy usando GitHub y quiero asegurarme de que sigo una convención estándar para no confundir a los usuarios.

Cualquier ayuda sería apreciada.

+2

convenciones de estructuras para lo ? Una aplicación MVC? Un sitio web simple? – chchrist

Respuesta

3

PHP realmente no tiene un estándar. Si está utilizando algún marco (por ejemplo, CakePHP, Zend Framework, etc.), puede imponerle algunos estándares.

Si no está utilizando una biblioteca de terceros que fuerza una estructura, solo use el sentido común. (Coloque imágenes en un directorio de imágenes, archivos incluidos en un directorio incluido, etc.) Las personas que descarguen e instalen aplicaciones PHP ya se utilizarán para cada aplicación haciendo las cosas de manera diferente. El hecho de que lo pienses un poco te pone a la cabeza de la competencia :)

3

Puedes elegir cualquier estructura de directorios. Pero si le gustaría saber sobre las mejores prácticas, eche un vistazo a cómo se hace en los marcos, por ejemplo, sinfonía.

Echale un vistazo: http://www.flickr.com/photos/deia/402335716/

He aquí algunos de ellos:

  • Todo el código que se incluye, debe ser puesto fuera de la raíz del documento.

  • Las plantillas HTML deben estar en un directorio aparte.

  • Las bibliotecas y las clases deben estar en el directorio 'lib'.

Principalmente se trata de soluciones razonables, no de convenciones estrictas.

5

Como dijo speshak PHP no tiene estándares ni convenciones (incluida su propia biblioteca estándar).

Sin embargo:

  1. En directorio público (por lo general public_html) tienda sólo estática de recursos (imágenes/JS/CSS) y un archivo index.php PHP que se limita a algo como esto:

    <?php 
    
    
    require '/path/to/app/outside/public/html/start.php'; 
    $app = new App(); 
    $app->run(); 
    
  2. La aplicación en sí debe almacenarse fuera del directorio público.

  3. La estructura del archivo puede reflejar los nombres de las clases, por lo que: Project\Util\XML\Parser se almacenará en el archivo /path/to/the/project/Project/Util/XML/Parser.php.
  4. Por supuesto, el código de terceros podría almacenarse en una carpeta separada, digamos vendor, es una convención bastante común.
3

Creo que la más obvia es sus bibliotecas. Debe nombrar sus clases como YourCompany_Module_Class, si quiere ser compatible. Al utilizar este estándar, sus bibliotecas se pueden usar junto con otras bibliotecas con nombres similares sin conflictos ni problemas. El nuevo espacio de nombres en PHP 5.3+ ayuda más en lograr esto. Puede tener algunas pautas para esto en Zend Coding Standards - File Naming y en PSR-0 Standard Proposal.

Aparte de eso, es mejor que siempre tenga en mente el futuro y planifique la estructura de su carpeta en consecuencia. Por ejemplo, supongamos que está cargando imágenes en user_images. De acuerdo. Pero lo que sucede cuando el proyecto se capta o se hace más grande y ahora tiene decenas de miles de archivos en una sola carpeta. Debe construir un esquema que le permita almacenar ~ 1k imágenes por directorio como máximo 12/56/154.jpg.

Verá muchos de estos problemas y oportunidades con el tiempo. Pero se puede ver en los proyectos actuales y aprender de ellos de forma gratuita :)

2

No es éste:

https://github.com/php-pds/skeleton

Basado en data collected from various open-source projects, este documento propone una convención de nombres para un número de nivel raíz directorios designados para varios propósitos comunes, así como convenciones de nombres para archivos de documentación de nivel raíz.

No he encontrado que esto cubre todos los escenarios imaginables, pero es agradable ser capaz de señalar en este e indicar que está haciendo un esfuerzo por lograr cierta coherencia entre los proyectos :-)