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