2014-07-07 9 views

risposta

18

se si utilizza:

$obj = new ArrayObject(); 

significa che ArrayObject è definita nel namespace corrente. È possibile utilizzare questa sintassi in cui si trova lo spazio dei nomi globale (nessuno spazio dei nomi definito nell'ambito corrente) o se ArrayObject è definito nello stesso spazio dei nomi dell'ambito corrente (esempio Foo\Bar).

e se si utilizza:

$obj = new \ArrayObject(); 

significa che ArrayObject è definito nel namespace globale.

Nel tuo esempio, probabilmente si dispone di codice qualcosa di simile:

namespace Foo\Bar; 

$obj = new ArrayObject(); 

Non funzionerà perché non hai definito ArrayObject in Foo\Bar namespace.

Il codice di cui sopra è lo stesso:

namespace Foo\Bar; 

$obj = new \Foo\Bar\ArrayObject(); 

E se ArrayObject è definita nel namespace globale (come probabilmente nel tuo caso) è necessario utilizzare il codice:

namespace Foo\Bar; 

$obj = new \ArrayObject(); 

di accento che ArrayObject non è definito nello spazio dei nomi Foo\Bar;

Un'altra cosa: se si utilizza ArrayObject in molti punti nello spazio dei nomi corrente, potrebbe non essere molto comodo aggiungere ogni volta il backslash iniziale. Ecco perché è possibile importare spazio dei nomi così si potrebbe usare più semplice sintassi:

namespace Foo\Bar; 

use ArrayObject; 

$obj = new ArrayObject(); 

Come vedete use ArrayObject; è stato aggiunto prima di creare oggetti da importare ArrayObject dal namespace globale. Utilizzando use non c'è bisogno di aggiungere (e non si deve) aggiungere leader barra rovesciata ma funziona lo stesso come se fosse use \ArrayObject; così sopra il codice è equivalente logicamente:

namespace Foo\Bar; 

use \ArrayObject; 

$obj = new ArrayObject(); 

però come ho detto leader backslash l'importazione di spazi dei nomi non deve essere utilizzata. Citando il manuale PHP per quello:

Note that for namespaced names (fully qualified namespace names containing namespace separator, such as Foo\Bar as opposed to global names that do not, such as FooBar), the leading backslash is unnecessary and not recommended, as import names must be fully qualified, and are not processed relative to the current namespace.