我有一个表单,提交表单的网址将动态生成
var Var1 = new Array();
var Var2 = new Array();
if(Var1.length === 0)
$(this).attr('action', 'http://localhost/Method' ).submit();
if(Var1.length != 0 && Var2.length === 0)
$(this).attr('action', 'http://localhost/Method/Var1').submit();
if(Var1.length != 0 && Var2.length != 0)
$(this).attr('action', 'http://localhost/Method/Var1/Var2').submit();
并且所有 URL 都会在服务器中触发一种方法,它是
public function Method(){}
public function Method(Var1){}
public function Method(Var1 , Var2){}
无论如何,可以将最后 3 种方法都作为一种方法吗? 像这样:
public function Method(Var1, Var2){
if( condition for Var1 ){// doSomthing}
if( condition for Var2 ){// doSomthing}
}
如果你在 PHP 中需要这个函数,你可以使用 func_get_arg
和 func_num_args
:
public function Method() {
$numArguments = func_num_args();
if ($numArguments >= 1) {
$argument1 = func_get_arg(0);
// Do something with argument 1
}
if ($numArguments >= 2) {
$argument2 = func_get_arg(1);
// Do something with argument 2
}
}
如果所有三个 url 都调用服务器中的单个方法,则可以使用默认的参数机制。
public function Method($Var1=null, $Var2=null){
if(is_null($Var1)){// doSomthing}
if(is_null($Var2)){// doSomthing}
}
显然,要映射这些URL,您需要使用某种路由器逻辑。并且路由器必须调度对象的正确方法。
例如,如果您的网址类似于 /index.php/Object/method/param1/param2
,index.php
应该首先创建正确的对象。
$parts = explode('/', $_SERVER['REQEUST_URI']);
array_shift($parts); // emtpy part
array_shift($parts); // index.php
$cls = array_shift($parts) // Object
$obj = new $cls;
然后调度方法。
$method = array_shift($parts);
call_user_func_array(array($obj, $method), $parts);
public function Method(){
$root = 'http://localhost/Method/',
$Var1 = func_get_args(0) || '',
$Var2 = func_get_args(1) || '';
if($Var1 && $Var2) $root .= $Var1 + '/' + $Var2;
else if($Var1 && !$Var2) $root .= '/' + $Var1;
}