Me gustaría obtener los nombres de todas las clases dentro de un espacio de nombre específico en PHP. Actualmente, estoy intentando hacer algo de magia a través de la reflexión en una lista específica de clases con nombre, pero me gustaría hacerlo sin saber los nombres antes de tiempo.En PHP, ¿hay alguna manera de obtener todas las clases declaradas en un espacio de nombre específico?
He intentado llamar al get_declared_classes()
, pero por alguna razón, las clases que tengo disponibles no se muestran. Puedo llamar al get_declared_classes()
, no ver Event
en la lista, luego llamar inmediatamente al $x = new Event()
sin ningún problema. Algo como el siguiente, que creo que debería causar un problema ...
if (! in_array('Event', get_declared_classes())) { $x = new Event(); }
... funciona bien. Me pregunto si el espacio de nombres de estas clases y la recuperación de esa manera ayudaría a aliviar el problema. es posible?
EDITAR: Para aclarar, permítanme agregar que actualmente no estoy usando espacios de nombres, y no estoy tratando específicamente de lograr algo del código mencionado anteriormente. Lo que quiero es obtener los nombres de todas las clases que he declarado. A pesar de que las declaraciones de clase de todos ellos están siendo afectadas antes de llamar al get_declared_classes()
, no todas aparecen en la lista. Esperaba que el espacio de nombres pudiera ayudar a resolver el problema.
EDIT2: Varias personas han señalado que las clases pueden cargarse automáticamente. Probé esto haciendo lo siguiente. echo(class_exists('Event'))
devolvió un valor de 1
. echo(class_exists('Event', FALSE))
devolvió un valor de 0. El segundo parámetro opcional para class_exists es si se carga automáticamente o no. Entonces, aparentemente la clase está siendo cargada automáticamente. Eso responde eso.
Entonces, la próxima pregunta: ¿cómo puedo evitar esto? Estoy usando un framework que realmente no me da mucho control de bajo nivel. ¿Hay alguna manera de forzar la carga automática, ENTONCES llame al get_declared_classes
, o get_declared_classes
para disparar primero una carga automática?
En este escenario en el que get_declared_classes no contiene eventos, ¿se ha cargado el código de evento? En otras palabras, ¿se ha incluido el archivo que contiene la declaración de clase del evento (o se ha definido de alguna otra manera en el flujo de código)? – Corbin
No me he molestado en probar, pero creo que esto podría deberse a que has hecho referencia a un NS con una sentencia de uso y el nombre de clase en el conjunto va a ser el totalmente calificado con el espacio de nombres. De modo que, si bien 'new Event' podría funcionar, realmente hace referencia a' \ Some \ OtherNamespace \ Event'. – prodigitalson
@Corbin El código del evento definitivamente está cargado. Si no, '$ x = new Event()' fallaría, ¿verdad? – rybosome