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 がサーバーで 1 つのメソッドを起動し、それが

public function Method(){}
public function Method(Var1){}
public function Method(Var1 , Var2){}

最後の 3 つのメソッドをすべて 1 つのメソッドにする方法はありますか? このようなもの:

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

3 つの URL すべてがサーバー内の 1 つのメソッドを呼び出す場合は、デフォルトの引数メカニズムを使用できます。

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 に答える