Si en un directorio B tengo un documento b.php con el siguiente código
Código PHP:
Ver original
<?php namespace B; function b(){ ?> <p>hola mundo</p> <?php }
En otro directorio A tengo un documento a.php con el siguiente código
Código PHP:
Ver original
<?php namespace A class A{ public function invoke($func){ //esto devuelve error de sintaxis return \B\$func(); } } ?>
Entonces, cómo lo anterior da error de sintaxis, probé con esto otro
Código PHP:
Ver original
<?php namespace A class A{ public function invoke($func){ //esto devuelve un string, era evidente, pero por probar... return "\B\${func}()"; } } ?>
Entonces decidí incluir el archivo
Código PHP:
Ver original
namespace A //incluye un documento function load($func){ include "./html/${func}.php"; } class A{ public function invoke($func){ load($func); return ${func}(); } }
En este punto, no reconoce la función b(), sí incluye el archivo, porque no devuelve error, notice, etc. pero dice que esa función no ha sido econtrada; entonces deduje que era porque el namespace en dónde está definida la función es distinto: se produce un cambio de namespace.
Así que quité el namespace en donde está escrita la funcion b() y efectivamente sí funcionó el código.
Siempre teniendo en cuenta que llamo a la clase A desde un documento en un directorio de jerarquía superior con spl_autoload_register();
Y claro, la duda es
¿no hay una manera de poder llamar a la función (en un ambiente dónde la llamada debe ser ciega/dinámica para poder utilizar cualquier función dentro del directorio B) utilizando algo cómo lo siguiente pero que no de error?
Código PHP:
Ver original
namespace A class A{ public function invoke($func){ //de esta manera //(da error porque espera un identificador, no una variable) return \B\${func}(); //o de esta otra manera return \B\$func(); } }
El propósito es no tener que usar una función al margen de una clase para tener que incluir el archivo y que el código quede más legible utilizando el namespace de la función. ¿Se llama performance ?
Saludos.