三元或类似的东西选择功能?

时间:2011-07-28 19:13:25

标签: php function ternary-operator

我正在使用Drupal在PHP中进行自动化测试。这是一个有两个我关注的方法的课程:pass()fail()。每个都在结果页面上生成一个单独的行,指示特定操作是通过还是失败,例如

if ( $value == "expected_value" ) {
  $this->pass("Looking for expected value");
} else {
  $this->fail("Looking for expected value");
}

我注意到上面的内容是它有点冗长。我想做三元分配之类的事情,而只是决定调用哪个函数。类似的东西:

$function = ($value == "expected_value") ? "pass" : "fail" ;
$this->$function("Looking for expected value.");

这是否是我能说出这种逻辑的最简洁,优雅的方式?我试过了

$this->(($value == "expected_value") ? "pass" : "fail")("Looking for expected value.");

但是我得到了一个解析错误。有没有办法将它归结为一行,如三元分配?

编辑我认为的详细信息不是if-else结构,而是我重复了两次相同的信息。在我看来应该有一种表达方式,我只声明一次消息。当然我可以将它放在一个变量中,但这会占用额外的空间,我也会将它传递两次。

这是构建我的问题的另一种方式:有没有一种方法可以定义这个逻辑而只表达Looking for expected value一次?

2 个答案:

答案 0 :(得分:8)

我会使用通常的if-elseif语句,因为它最明显,最易读,而且(可能只是我)它不是“详细”,只是一个if-elseif - 语句。

然而

($value == $expectedValue) ? $this->pass() : $this->fail();

答案 1 :(得分:1)

我认为您的原始代码是最易于阅读的,但如果您想要更短的内容(尽管不一定优雅),您可以这样做:

call_user_func(
  array($this,$value == "expected_value"?'pass':'fail'),
  "Looking for expected value."
)