【发布时间】:2011-10-15 10:00:12
【问题描述】:
我正在使用 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?
【问题讨论】:
-
您似乎试图通过语法而不是通过设计来简洁。与其尝试压缩代码,不如创建一个可以验证数据并自动调用通过/失败的简单类。尝试从应用程序特定代码中获取“通用”代码。
-
我同意。无论如何,使用 KingCrunch 的答案中演示的三元,但是这样做是为了替换函数名本身?沿着这条路只有疯狂的谎言。当您在两年内打开它并试图弄清楚到底发生了什么时,好处(我向您保证完全被感知,而不是实际)不值得一秒钟的困惑。
标签: php function ternary-operator