2012-02-14 8 views
11

Ho un file che richiedono() 'un namespace, come ad esempio:PHP: namespace in un unico file con uno spazio dei nomi globale

<?php 
require_once('Beer.php'); // This file contains the Beer namespace 

$foo = new Beer\Carlsburg(); 
?> 

vorrei mettere lo spazio dei nomi della birra direttamente nello stesso file, come questo (unworking) esempio:

<?php 
namespace Beer { 
    class Carlsburg {} 
} 

$foo = new Beer\Carlsburg(); 
?> 

Tuttavia, l'interprete PHP lamenta che No code may exist outside of namespace. Posso quindi inserire la dichiarazione $foo in un namespace, ma poi devo anche avvolgere Beer in quel namespace per accedervi! Ecco un esempio di lavoro di quello che sto cercando di evitare:

<?php 
namespace Main\Beer { 
    class Carlsburg {} 
} 

namespace Main { 
    $foo = new Beer\Carlsburg(); 
} 
?> 

C'è un modo per includere il codice per il Beer spazio dei nomi nel file, ma non avvolgere la dichiarazione $foo nel proprio spazio dei nomi (lasciare nel namespace globale)?

Grazie.

+0

Si dovrebbe avere Heineken come spazio dei nomi! – marko

risposta

15

si dovrebbe usare il namespace globale:

<?php 
namespace Beer { 
    class Carlsburg {} 
} 


namespace { // global code 
    $foo = new Beer\Carlsburg(); 
} 
?> 

vedi qui ->http://php.net/manual/en/language.namespaces.definitionmultiple.php

+0

Questo non funzionerà se non scrivete '$ foo = new Main \ Beer \ Carlsburg();' –

+0

@skwee oops ... mi dispiace - aggiornato per corrispondere alla domanda – ManseUK

+2

Oppure utilizzare 'use', vedere http: // stackoverflow. it/a/9274472/367456 – hakre

2

Prova a mettere una barra rovesciata prima del nome dello spazio dei nomi:

$beer = new \Beer\Carlsberg(); 

La barra rovesciata iniziale è tradotto in "global namespace". Se non si inserisce la barra rovesciata iniziale, il nome della classe viene tradotto nello spazio dei nomi corrente.

Problemi correlati