0

機能を公開し、ユーザーにデータを提供する 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'];
     ...
4

0 に答える 0