¿Por qué el guión bajo se convierte en separador de directorios en el estándar PSR-0?

StackOverflow https://stackoverflow.com//questions/11696219

  •  12-12-2019
  •  | 
  •  

Pregunta

El PSR-0 (https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) especifica que un guión bajo en el nombre de la clase debe convertirse en un separador de directorio en el nombre del archivo correspondiente.

Para mí, esto no parece ser una buena idea ya que crea muchos errores cuando alguien que no conoce el estándar usa inocentemente un guión bajo en el nombre de la clase y de repente el cargador automático no puede encontrar la clase y aparecen todo tipo de errores extraños (ver este problema de desbordamiento de pila, por ejemplo: Error de mapeo de Symfony2.1:padres_clase())

Así que supongo que debe haber algún tipo de razón (¿compatibilidad histórica con alguna biblioteca?) para esta "característica".Mi pregunta es:¿Alguien sabe por qué se introdujo esto en el estándar PSR-0?

¿Fue útil?

Solución

Los guiones bajos se utilizaron en los tiempos en que PHP aún no ayudó a los espacios de nombres.Un proyecto organizado "correcto" sigue la convención de nombres que desempeñan los archivos de la misma manera que la estructura del directorio.

Es solo una "regla general" para organizar archivos en un proyecto.

así que si tiene una estructura de directorios de:

root
  Name
    Package
      MyClass.php

Personas solían hacer:

class Name_Package_MyClass {}

Pero ahora que tenemos espacio de nombres, se convierte en:

namespace Name\Package;

class MyClass { }

Solo está codificando una guía de estilo que garantiza que todo el mundo haga lo mismo.

Entonces, lo que hace PSR-0 es el mapa tanto el viejo como el nuevo estilo de nombres a un nombre de archivo.

Otros consejos

PHP soporta espacios de nombres desde la versión 5.3, anteriormente la convención más común era usar guión bajo como separador de espacios de nombres (directorio), por ejemplo: My_Project_ClassName fue mapeado como /path/to/my/My/Project/ClassName.Creo que la compatibilidad con versiones anteriores es la razón principal.

Tenga en cuenta que el estándar PSR-0 se escribió para algunos proyectos específicos y no necesariamente la mejor opción para su propio proyecto.Como dice en su sitio: "Si otras personas quieren adoptar lo que estamos haciendo, son bienvenidos a hacerlo, pero ese no es el objetivo".PSR-0 es muy restrictivo, no elegiría usarlo solo porque otras personas.Considere lo que realmente desea de su proyecto y si será beneficioso para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top