PHP使用变量来调用命名空间

时间:2017-01-05 15:12:00

标签: php class variables scope namespaces

是否可以使用变量调用命名空间?

例如:

$class_name     = strtolower( $interface_name );
$return['html'] = \interfaces\$class_name::get_loginForm();

但是,这会返回错误:

  

解析错误:语法错误,意外'$ class_name'(T_VARIABLE),   期待标识符(T_STRING)

我正在连接几个第三方API,它们都做同样的事情,但是以他们自己独特的方式。在加入我们的网站之前,用户已经连接到他们的首选API。不同API的中间件将存储在同一命名空间下的定制文件中。

有可能解决在接口名称上运行交换机并调用相关命名空间的问题,但这意味着每次新API出现时都必须找到并添加到交换机,以便任何帮助这个问题将不胜感激。欢呼声。

2 个答案:

答案 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');