Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于测试动态调用php对象方法?_Php_Object_Dynamic_Methods - Fatal编程技术网

基于测试动态调用php对象方法?

基于测试动态调用php对象方法?,php,object,dynamic,methods,Php,Object,Dynamic,Methods,有人能告诉我,如果测试成功,是否可以调用php对象的方法?例如下面 正常使用: $obj = new obj; $obj->call() ->successive() ->methods(); 运行测试以查看是否应调用方法: $obj = new obj; $obj->call() ( if ($a) ? ->successive() : '') ->methods(); 有没有办法让上面的第二个例子起作用?还是以另一种方式

有人能告诉我,如果测试成功,是否可以调用php对象的方法?例如下面

正常使用:

$obj = new obj;
$obj->call()
    ->successive()
    ->methods();
运行测试以查看是否应调用方法:

$obj = new obj;
$obj->call()
    ( if ($a) ? ->successive() : '')
    ->methods();
有没有办法让上面的第二个例子起作用?还是以另一种方式达到同样的结果?谢谢。

也许吧

$obj = new obj;
$temp = $obj->call();
if ($a) {
   $temp = $temp->successive();
}
$temp->methods();

如果您在测试失败时有一个回退方法来执行,您可以这样构造它,我认为:

$obj = new obj;
$obj->call()
    ->{ $a ? "successive" : "fallback_method"}()
    ->methods();
那会有帮助吗?您可能希望回退方法如下所示:

function fallback_method() {
    return $this;
}

可能将方法名传递给
.successive()
,并将其作为回调处理

class obj {
  private $is_success;

  public function call() {
     $this->is_success = return_a_boolean();
     return $this;
  }

  public function successive($callback) {
     if ($this->is_success && method_exists($this, $callback)) {
        $this->$callback();
     }
     return $this;
  }

  public function methods() {
      //....
  }
}

$obj = new obj;
$obj->call()
    ->successive('methods');

或者您可以执行
->连续(a)->
,然后在方法内部执行表单检查。