0

我正在设置一个 PHP API,它将向我的用户公开功能并向我的用户提供数据,并且我正在寻找一种优雅的方式来将我的用户“传递”给我的参数传递给我的函数。我可以确定我的用户正在调用什么方法 ($_POST['method']),并且根据方法,该方法的零个或多个参数。我使用元数据数组验证它们。例如:

$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