機能を公開し、ユーザーにデータを提供する PHP API をセットアップしています。ユーザーが「渡す」引数を関数に渡すエレガントな方法を探しています。ユーザーが呼び出しているメソッド ($_POST['method']) と、メソッドに応じて、メソッドへの 0 個以上の引数を特定できます。メタデータ配列を使用してそれらを検証します。例えば:
$methods = array(
'say_hello' => array('name'),
'say_goodbye' => array(),
'do_something' => array( 'foo', 'bar' )
);
これらに対応する関数があります:
function say_hello( $name ) { printf( "Hello, %s, $name ); }
function say_goodbye() { printf( "Goodbye!" ); }
function do_something( $foo, $bar ) { printf( "%d + %d = %d.", $foo, $bar, $foo+$bar ); }
POST が届いたら、彼らが要求しているメソッドが私の配列キーであることを確認します (したがって、彼らは $_POST['method'] = 'exec' などの悪意のあるものを渡していません)。実際の呼び出し:
$method = $_POST['method'];
$method(); // make the call
また、メソッドを知ることで、どの引数を使用する必要があるかを判断することもできます。
$args = $methods[ $method ]; // an array of 0-2 items
しかし、大きな if-elseif-elseif-... なしでこれを組み合わせる良い方法はありますか?
if( 'say_hello'==$method )
$method( $_POST['name'] );
elseif( ... )
...
Python のようなmyfunc(*args)
ものは、私がやろうとしていることです。
$method = $_POST['method'];
$args = $methods[ $method ];
$method( $args );
今のところ、私の最善の策は、メソッドに引数をロードすることです:
function do_something()
{
$foo = $_POST['foo'];
$bar = $_POST['bar'];
...