Perché il sottolineatura è convertito nel separatore di directory nello standard PSR-0?

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

  •  12-12-2019
  •  | 
  •  

Domanda

il PSR-0 ( https://github.com/php-fig/fig-standards/blob/master/accettato/psr-0.md ) Standard Specifica che un sottolineatura nel nome della classe deve essere convertito in un separatore di directory nel file corrispondenteNome.

Per me questo non sembra essere una buona idea in quanto crea un sacco di errori quando qualcuno che non conosce lo standard che usa innocentemente un sottolineamento nel nome della classe e improvvisamente il caricatore automatico non riesce a trovare la classe e ogni tipo di errori straniAppare (consultare questo problema di StackOverflow ad esempio: symfony2.1 Errore di mappatura: class_parents () )

Quindi immagino che ci debba essere una specie di ragione (compatibilità storica con qualche biblioteca?) Per questa "funzionalità".La mia domanda è: qualcuno sa perché è stato introdotto nello standard PSR-0?

È stato utile?

Soluzione

Le sottolineature sono state utilizzate nei tempi che PHP non supportò gli spazi dei nomi.Un progetto organizzato "corretto" segue la convenzione di non esercitazioni dei file allo stesso modo della struttura della directory.

È solo una "regola" generale "per organizzare i file in un progetto.

Quindi se hai una struttura di directory di:

root
  Name
    Package
      MyClass.php
.

Persone usate per fare:

class Name_Package_MyClass {}
.

Ma ora che abbiamo dei namespace diventa:

namespace Name\Package;

class MyClass { }
.

è solo la linea guida in stile codifica che garantisce che tutti facciano la stessa cosa.

Allora, cosa fa PSR-0 è mappare sia il vecchio che il nuovo stile della spinta della Namespazione a un nome file.

Altri suggerimenti

PHP supporta gli spazi dei nomi Dalla versione 5.3, in precedenza, la convenzione più comune era quella di utilizzare il separatore di Nomina come separatore del Namespace (directory), ad es.: My_Project_ClassName è stato mappato come /path/to/my/My/Project/ClassName.Credo che la compatibilità all'indietro sia la ragione principale.

Tieni presente che lo standard PSR-0 è stato scritto per alcuni progetti specifici e non necessariamente l'opzione migliore per il tuo progetto.Come dice sul loro sito: "Se altre persone vogliono adottare ciò che stiamo facendo sono benvenuti a farlo, ma non è l'obiettivo."PSR-0 è molto restrittivo, non sceglierei di usarlo solo perché altre persone sono.Considera cosa vuoi effettivamente dal tuo progetto e se sarà vantaggioso per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top