使用常量在PHP中调用具有该名称的函数

时间:2017-09-24 11:56:00

标签: php

我有以下代码:

$this->load->library('dummyLib');
$this->dummyLib->dummyLibFunction();

(我正在使用类似的PHP框架)

现在我希望能够根据我已经定义的常量更改不同的库:

defined('LIB') OR define('LIB', 'dummy');

我可以使用$myLibrary = LIB

由于我必须在不同的位置加载该库,我希望我的代码能够自动调整到该常量。我知道可以使用如下变量进行函数调用:

$myFunctionNameInThisVariable = 'test';
$this->$myFunctionNameInThisVariable();

这将调用$this->test()

我可以对常数做同样的事吗?或者我是否总是要使用其他变量?

1 个答案:

答案 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