3

谁能告诉我是否可以根据测试的成功调用 php 对象的方法?例如下面...

正常使用:

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

运行测试以查看是否应调用方法:

$obj = new obj;
$obj->call()
    ( if ($a) ? ->successive() : '')
    ->methods();

有什么办法可以使上面的第二个例子起作用吗?或者另一种达到相同结果的方法?谢谢。

4

3 回答 3

2

也许?

$obj = new obj;
$temp = $obj->call();
if ($a) {
   $temp = $temp->successive();
}
$temp->methods();
于 2012-09-24T04:18:50.633 回答
1

也许将方法名称传递给.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');
于 2012-09-24T04:26:56.547 回答
0

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

$obj = new obj;
$obj->call()
    ->{ $a ? "successive" : "fallback_method"}()
    ->methods();

那会有帮助吗?您可能希望后备方法看起来像:

function fallback_method() {
    return $this;
}
于 2012-09-24T04:25:23.327 回答