我正在使用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
一次?
答案 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."
)