2011-09-19 12 views
6

¿Cuál es el equivalente de la declaración using Name.Space; de C# para hacer que todas las clases de ese espacio de nombres estén disponibles en el archivo actual? ¿Esto es posible con PHP?Espacios de nombres PHP: equivalente a C# usando

Lo que me gustaría (pero que no funciona):

<?php 
# myclass.php 
namespace Namespace; 
class myclass { 
} 
?> 

<?php 
# main.php 
include 'myclass.php' 
use Namespace; 

new myclass(); 
?> 

Respuesta

8

No hay ninguna. En PHP, el intérprete no conocerá todas las clases que posiblemente existan (especialmente debido a la existencia de __autoload), por lo que el tiempo de ejecución se verá afectado por muchos conflictos. Tener algo como esto:

use Foo\*; // Invalid code 
throw new Exception(); 

Podría e a Foo \ excepción que debe ser __autoload ed - PHP no puede saber.

Lo que puede hacer es importar un sub-espacio de nombres:

use Foo\Bar; 
$o = new Bar\Baz(); // Is Foo\Bar\Baz 

o alias:

use Foo\Bar as B; 
$o = new B\Baz(); // Is Foo\Bar\Baz 
+0

Debe ser posible que PHP cargue automáticamente una clase si no se encuentra en todos los espacios de nombres existentes (e importados). Si importé un espacio de nombres, cada clase que se definió correctamente (incluida) con ese espacio de nombres debe ser invocable. – knittl

+0

Esto daría lugar a un número masivo de llamadas de autocarga que tienen que llamar al autocargador para cada espacio de nombres importado para cada nombre de clase referenciado. Suponiendo que una función de carga automática es relativamente cara (mirando el sistema de archivos), esto es bastante notable. – johannes

+0

Sin mencionar, podría querer crear una clase que contenga archivos _during_ script y luego incluirlos para usar (un escenario improbable, y probablemente no muy inteligente, pero PHP puede hacerlo) – Mchl

0

Como se explica Johannes o puede aliases sus clases

DECLARACIÓN:

namespace myNamespace; 

class myClass { 
    public function __toString() 
    { 
     return "Hello world!"; 
    } 
} 

EJECUCIÓN:

include 'namespace.class.php'; 

use myNamespace\myClass as myClass; 

echo new myClass(); 
+1

No es lo que pedí. Sé que puedo importar clases individuales (y alias ellos), pero ese no es mi problema – knittl

+0

Oh, lo siento, sé que quieres usar espacios de nombres como en C# (¡yo también!), Pero como explicó johannes no es posible por ahora ... . Quería contribuir con la tecnología de la clase de aliasing en lugar del espacio de nombres secundario. – corretge

Cuestiones relacionadas