2017-09-24 62 views
0

我有以下代碼:使用不斷打電話與該名稱的函數在PHP

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

(我使用的是PHP框架,它的工作原理類似)

現在我希望能夠改變依賴於一個常數不同庫,我priviously定義:

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

,我可以使用像$myLibrary = LIB

由於我必須在不同位置加載該庫,我希望我的代碼自動調整爲該常量。我知道,函數調用是可能的,像這樣的變量:

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

這將調用$this->test()

我可以做同樣的常量?或者我總是必須使用一個額外的變量?

回答

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 
+0

好吧太糟糕了。我希望有一些語法,比如'$ this - > {CONSTANT}()'或者其他,但是,不管怎麼樣 – SourceOverflow