我有以下代码:
$this->load->library('dummyLib');
$this->dummyLib->dummyLibFunction();
(我正在使用类似的PHP框架)
现在我希望能够根据我已经定义的常量更改不同的库:
defined('LIB') OR define('LIB', 'dummy');
我可以使用$myLibrary = LIB
由于我必须在不同的位置加载该库,我希望我的代码能够自动调整到该常量。我知道可以使用如下变量进行函数调用:
$myFunctionNameInThisVariable = 'test';
$this->$myFunctionNameInThisVariable();
这将调用$this->test()
我可以对常数做同样的事吗?或者我是否总是要使用其他变量?
答案 0 :(得分:1)
要回答你的问题,让我们比较函数调用:
正常的函数调用是:
$this->functionName();
具有已定义常量的函数调用
$this->CONSTANT_NAME();
由于php函数的名称不区分大小写,因此php无法理解您要执行的操作 - 调用函数CONSTANT_NAME
或将常量CONSTANT_NAME
替换为实际值。所以,这里只有一个选项 - 通过提供的名称(CONSTANT_NAME
)找到一个函数并执行它。
所以答案是:是,在这种情况下你应该使用一个变量。
此外,使用call_user_func_
方法还有另一种选择:
function callMe()
{
echo '123';
}
define ('CALL_ME', 'callMe');
call_user_func(CALL_ME);
// yep, this works: https://3v4l.org/tbRrr