我正在设置一个 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'];
...