我有一个表单,提交表单的网址将动态生成
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}
}
答案 0 :(得分:2)
如果您需要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
}
}
答案 1 :(得分:2)
如果所有三个网址都在您的服务器中调用单个方法,则您可以使用default argument机制。
public function Method($Var1=null, $Var2=null){
if(is_null($Var1)){// doSomthing}
if(is_null($Var2)){// doSomthing}
}
显然要映射这些网址,您需要使用某种路由器逻辑。并且路由器必须调度对象的正确方法。
例如,如果您的网址类似于/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);
答案 2 :(得分:0)
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;
}