2012-02-14 16 views
11

que tienen un archivo que require() 'espacio de nombres sa, como tal:PHP: Los espacios de nombres en un único archivo con un espacio de nombres global

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

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

me gustaría poner el espacio de nombres de la cerveza directamente en el mismo archivo, como esto (desobramiento) ejemplo:

<?php 
namespace Beer { 
    class Carlsburg {} 
} 

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

Sin embargo, el intérprete de PHP se queja de que No code may exist outside of namespace. Por lo tanto, puedo ajustar la declaración $foo en un espacio de nombres, pero también debo envolver a Beer en ese espacio de nombres para acceder a él. Aquí está un ejemplo práctico de lo que estoy tratando de evitar:

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

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

¿Hay alguna manera de incluir el código de la Beer espacio de nombres en el archivo, sin embargo no envolver la declaración $foo en su propio espacio de nombres (dejar en el espacio de nombre global)?

Gracias.

+0

Debe tener Heineken como espacio de nombres! – marko

Respuesta

15

debería utilizar el espacio de nombres global:

<?php 
namespace Beer { 
    class Carlsburg {} 
} 


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

Ver aquí ->http://php.net/manual/en/language.namespaces.definitionmultiple.php

+0

Esto no funcionará a menos que escriba '$ foo = new Main \ Beer \ Carlsburg();' –

+0

@skwee uy ... lo siento - se ha actualizado para hacer coincidir la pregunta – ManseUK

+2

O haga uso de 'use', consulte http: // stackoverflow. com/a/9274472/367456 – hakre

2

intentar colocar una barra invertida antes de que el nombre de espacio de nombres:

$beer = new \Beer\Carlsberg(); 

La barra invertida inicial se traduce a "espacio de nombres global". Si no coloca la barra diagonal inversa inicial, el nombre de la clase se traduce al espacio de nombre actual.

Cuestiones relacionadas