是否可以使用变量调用命名空间?
例如:
$class_name = strtolower( $interface_name );
$return['html'] = \interfaces\$class_name::get_loginForm();
但是,这会返回错误:
解析错误:语法错误,意外'$ class_name'(T_VARIABLE), 期待标识符(T_STRING)
我正在连接几个第三方API,它们都做同样的事情,但是以他们自己独特的方式。在加入我们的网站之前,用户已经连接到他们的首选API。不同API的中间件将存储在同一命名空间下的定制文件中。
有可能解决在接口名称上运行交换机并调用相关命名空间的问题,但这意味着每次新API出现时都必须找到并添加到交换机,以便任何帮助这个问题将不胜感激。欢呼声。
答案 0 :(得分:2)
您可以像这样运行:
这是一个测试代码和 live demo
<?php
namespace App\animal;
$animal = 'animal';
class dog{
function __construct()
{
echo __METHOD__,"\n";
}
public function data(){return 'dog';}
static function cat(){return 'cat';}
}
$name = '\App\\'.$animal.'\\dog';
$dog = new $name;
echo $dog->data();
echo "\n";
echo $name::cat();
答案 1 :(得分:2)
@Kris Roofe的回答应该有效,但我会以call_user_func_array
函数http://php.net/manual/de/function.call-user-func-array.php
示例:
call_user_func_array( $function_as_string.'::'.$method_as_string, $params );
其中$params
是一个数据数组,将作为方法参数传递给所述函数。
所以在你的例子中它将是
call_user_func_array('\\interfaces\\'.$class_name'::get_loginForm');