0

ファイル名と関数名を取得して実行する配列をセットアップしようとしていますが、完全には機能していません。

コードは

$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();

それはうまくいきます、何かアイデアはありますか?

ありがとう

4

2 に答える 2

4

最後の行を次のように変更します。

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

これは、call_user_func関数を使用してコードを読みやすくし、移植性を高めます。以下も機能するはずです(PHP 5.4+でのみテスト済み)

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

あなたのコードとほぼ同じですが、実際には配列の値を返す代わりに関数を呼び出しています。関数呼び出し構文がなければ、()PHP get に変数 (この場合は配列) の値を取得して返すように要求するだけです。

于 2013-03-13T21:16:19.730 に答える
0

ここで便利なものが見つかります: How to call PHP function from string stored in a Variable

文字列に格納された関数名を呼び出すことは、あなたが望むものです...

于 2013-03-13T21:20:06.763 に答える