Tengo la siguiente gran duda que me ha surgido y no logro resolver.
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 originalnamespace 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 originalnamespace 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.