Correcta estructura para bibliotecas github

Escribí una class de cURL que quería compartir en github y también poner a disposition a través del compositor. Puse con éxito mi lib en github https://github.com/tzfrs/SimpleCurl , pero todavía tengo problemas para entender la estructura de carpetas correcta.

Actualmente lo tengo así:

  • El repository de git se llama "SimpleCurl"
  • El repository contiene una carpeta llamada src/
  • La carpeta src/ tiene el file SimpleCurl.php que es la class SimpleCurl
  • SimpleCurl embargo, la class SimpleCurl está en el espacio de nombres tzfrs/Util/
  • El file composer.json contiene la siguiente información

"autoload": { "psr-4": { "tzfrs\\Util\\": "src/" } }

Ahora, mi problema de comprensión es: ¿está bien que el SimpleCurl.php SimpleCurl.php mire directamente en la carpeta src/ ? ¿O debe estar en la carpeta src/tzfrs/Util en este repository de git?

En otras palabras, ¿pongo el nombre del proveedor y el espacio de nombres principal como una estructura de carpetas también en mis proyectos? ¿O solo pondré los subnamespaneos en el file?

Como ejemplo: supongamos que mi class SimpleCurl no está en el espacio de nombres tzfrs/Util/ pero en el espacio de nombres tzfrs/Util/Curl

¿Tendría que agregar el espacio de nombres Curl como una carpeta en la carpeta src ya que es un Subnamespacename?

Si su biblioteca sigue PSR-4, está bien tener SimpleCurl.php dentro de "src" usando esa configuration de autocarga. No hay necesidad de replicar el espacio de nombres como una estructura de carpetas, eso es algo que puede ver en muchas bibliotecas de PSR-0, pero PSR-0 estaba en desuso.

Si quieres tener la class SimpleCurl en el espacio de nombres tzfrs\Util\Curl , entonces solo necesitas crear una carpeta llamada Curl que debe contener tu SimpleCurl.php . Todo en src se agregará a su prefijo, que definió como tzfrs\Util .

Eche un vistazo a Battle of the Autoloaders: PSR-0 vs. PSR-4 .