2013-07-01 3 views
5

Secondo i PHP documentationPerché l'importazione di una funzione PHP nel namespace corrente non supportato

namespace PHP supportano tre tipi di aliasing o importazione: aliasing un nome di classe, aliasing un nome di interfaccia, e aliasing un nome dello spazio dei nomi. Si noti che l'importazione di una funzione o di una costante non è supportata.

Qualcuno conosce il contesto storico o tecnico del motivo per cui l'importazione di una funzione o di una costante non è supportata?

+0

Queste sono fondamentalmente le stesse restrizioni che C# ha. Non è possibile "importare" o "alias" una singola funzione o costante in quella lingua. Perché vorresti? –

+0

@RobertHarvey Scrittura di codice/sistemi in uno stile simile a python. –

+3

@Robert Perché può essere più conveniente? 'bar()' invece di 'Foo \ bar()' ... – deceze

risposta

1

Ho contattato Jochem Maas (l'autore of this five year old RFC), e mentre lui era titubante a pin punto una sola ragione (comprensibilmente, dato che non è attualmente profondamente coinvolto con il sistema dello spazio dei nomi), i suoi tre fattori erano

  1. nome classe collisioni sono stati più di un problema reale mondo di nome funzione collisioni

  2. funzioni PHP e classi vivono in diverse aree del codice del motore, e ci sono stati ostacoli tecnici per l'analisi fuori che era, che nel corso di una dichiarazione use .

  3. C'era qualche incertezza/differenza di opinione su come gestire il caricatore automatico e l'importazione/aliasing di funzioni specifiche. (Il caricatore automatico, un sistema separato, funziona solo con le classi)

Alla fine, il pragmatismo di PHP ha vinto fuori, e questo è il motivo per cui abbiamo il sistema namespace che abbiamo oggi.