我有一個問題,檢查IA功能的存在 - 我知道function_exists()和method_exists(),但不能得到的功能我找檢查是否函數存在
我通過像$ MM-套接字連接傳遞函數>播放器 - >播放()。 之後,我評估他們並通過套接字連接返回結果。
我過濾功能(必須以$ MM開頭,其他任何將被拒絕), ,但我不能讓我的代碼來檢查功能是否存在。這很重要,因爲如果該函數不存在,服務器將崩潰 。
任何人都知道這個解決方案?
在此先感謝。
代碼:
$MM = new SDBApplication;
在SDBApplication的構造函數:
$this->Player = new SDBPlayer;
我嘗試以下方法來檢查: 代碼:
method_exists($MM, "Player::Play");
function_exist("$MM->Player->Play);
都返回false即使函數存在
解決方案
$parts = explode('->', $string);
$numParts = count($parts)-1;
$object = '$MM';
for($i=0; $i < $numParts; $i++){
$object .= '->'.$parts[$i];
}
$parts[$numParts+1] = preg_replace('(\\(.*\\))', '', $parts[$numParts]);
eval('$check = method_exists('.$object.', '.$parts[$numParts+1].');');
它需要eval'd因爲輸入是一個字符串。
,你能告訴我們你的代碼和錯誤? – 2012-04-11 19:06:59
這是越來越晚了,所以我會做的第一件事tomorow – 2012-04-11 20:45:29
@DavidChan添加了代碼 – 2012-04-12 09:05:34