1

我有一个表单,提交表单的 url 将动态生成

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}
}
4

3 回答 3

2

如果你需要 PHP 的这个函数,你可以使用func_get_argand 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
    }
}
于 2012-05-20T17:57:47.573 回答
2

如果所有三个 url 调用服务器中的一个方法,您可以使用默认参数机制

public function Method($Var1=null, $Var2=null){
    if(is_null($Var1)){// doSomthing}
    if(is_null($Var2)){// doSomthing}
}

显然,要映射这些 url,您需要使用某种路由器逻辑。并且路由器必须调度对象的正确方法。

例如,如果您的 url 类似于/index.php/Object/method/param1/param2index.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);
于 2012-05-20T18:03:40.847 回答
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;
}
于 2012-05-20T17:59:48.557 回答