2011-08-11 18 views
12

¿Es posible obtener una lista de todas las clases/espacios de nombres importados en un archivo PHP, en el contexto actual?PHP5: obtener la lista de espacios de nombres importados

Por ejemplo:

namespace A; 
use B, C\D; 

me gustaría obtener esta matriz:

array('B', 'C\D'); 

La razón es que estoy construyendo un Registro Mapper, y me gustaría poder para consultar este asignador utilizando el nombre de clase con alias en el contexto actual, y no el nombre completo.

Por ejemplo:

$registry->getMapper('D'); 

En lugar de:

$registry->getMapper('C\D'); 

Y si es posible, me gustaría que no codificar estos alias, si hay una manera de conseguir de forma automática desde PHP!

Respuesta

3

Esto se discutió recientemente en la lista de correo PHP Internals. La respuesta corta (como yo lo entiendo) es no. http://marc.info/?l=php-internals&m=130815747804590&w=2

+0

Gracias, como se ha dicho en la respuesta de Ernesta, me Estoy tratando de obtener los valores de 'uso'. Entiendo que esta información probablemente solo sea útil para el analizador sintáctico, pero esperaba que esta información estuviera disponible para el motor. – Benjamin

0

La única forma de hacerlo, en su __construct principal(), lea las clases dir, para todos los archivos php disponibles para los espacios de nombres. (PHP Manual: glob() - Answer 101017).

+0

Gracias, en realidad, no estoy buscando una forma de obtener espacios de nombres definidos, sino más bien obtener las declaraciones 'use'. – Benjamin

+0

Luego escriba una función para la cual llama al usuario y registra su solicitud. –

0

La respuesta más común para esta pregunta: is it possible to get list of defined namespaces

tiene algo de código muy útil que puede enumerar todos los espacios de nombres:

$namespaces=array(); 
    foreach(get_declared_classes() as $name) { 
     if(preg_match_all("@[^\\\]+(?=\\\)@iU", $name, $matches)) { 
      $matches = $matches[0]; 
      $parent =&$namespaces; 
      while(count($matches)) { 
       $match = array_shift($matches); 
       if(!isset($parent[$match]) && count($matches)) 
        $parent[$match] = array(); 
       $parent =&$parent[$match]; 

      } 
     } 
    } 

    print_r($namespaces); 
+0

Esto devuelve la lista de espacios de nombres para todas las clases declaradas, mientras que la pregunta es cómo devolver el * namespace * importado * en el archivo * actual *. ¡Muy diferente! – Benjamin

Cuestiones relacionadas