2013-03-13 54 views
0

我想設置一個數組,它將拉動文件名和函數名稱來運行,但它不能完全正常工作。PHP函數在數組中破碎

的代碼是

$actionArray = array(
    'register' => array('Register.php', 'Register'), 
); 

if (!isset($_REQUEST['action']) || !isset($actionArray[$_REQUEST['action']])) { 
    echo '<br><br>index<br><br>'; 
    echo '<a href="?action=register">test</a>'; 
    exit; 
} 

require_once($actionArray[$_REQUEST['action']][0]); 
return $actionArray[$_REQUEST['action']][1]; 

Register.php有

function Register() 
{ 
    echo 'register'; 

} 


echo '<br>sdfdfsd<br>'; 

不過,這並不呼應註冊,只是sdfdfsd。

如果我改變了第一批的代碼

return $actionArray[$_REQUEST['action']][1]; 

return Register(); 

它的工作原理,任何想法?

感謝

+0

不使用'$ _REQUEST',使用'$ _GET'或'$ _POST'來代替。 – 2013-03-13 21:16:37

+0

代碼來自SMF論壇軟件,我只是在玩它,我改變的唯一一點是回聲 – Garry 2013-03-13 21:22:32

回答

4

更改最後一行:

return call_user_func($actionArray[$_REQUEST['action']][1]); 

這將使用更多可讀的代碼和更好的便攜性的call_user_func功能。下面的方式也應該工作(僅在PHP測試5.4+)

return $actionArray[$_REQUEST['action']][1](); 

這幾乎與您的代碼,但實際上,我調用該函數,而不是返回數組的值。如果沒有函數調用語法(),您只需要PHP獲取變量的值(在本例中爲數組)並返回它。