我正在修补一个补丁,以便为Drupal提交Registration Code module。简而言之,是否有更有效的方法来编写下面的代码?
if (module_exists('regcode_voucher')) {
$cnfg = variable_get('regcode_voucher_display', array('regform' => 'regform'));
if (empty($cnfg['regform'])) {
return;
}
}
似乎我应该能够将if
语句减少为&&
语句并结合两个条件,但我还没有找到允许的语法或必要的php数组函数我这样做。
如果某些上下文有帮助,regcode_voucher子模块允许用户在用户编辑页面上输入他们的注册码。在我们的网站上,经过" beta"期间,我们希望通过删除注册码字段来简化注册表格;但我们希望用户仍然可以在其帐户编辑页面上输入代码。上面的代码是补丁的一部分,允许绕过regcode的hook_user更改。
答案 0 :(得分:2)
代码看起来很好,你想要什么样的效率?几乎没有变化:
if (module_exists('regcode_voucher')) {
$cnfg = variable_get('regcode_voucher_display', null);
if ($cnfg) {
// do your actions
}
}
我不建议合并,如果......,代码应该清晰,易于理解。如果你将它们合并以进行优化,那么对于真实处理器来说,你会赢得“微小”毫秒,但却丢失了干净的代码。
答案 1 :(得分:0)
如果找不到变量,为什么要从variable_get返回数组? variable_get将始终返回一个字符串或一个序列化数组(需要反序列化)。如果我遗漏了某些东西,你可以使用array_key_exists('regcode',variable_get(...))来检查数组密钥。
这应该有效...注意如果找不到变量,则从variable_get返回“false”作为默认值,这将导致if条件不匹配。我个人认为这比嵌套的if语句更具可读性(尽管我已经嵌套了3个以上的条件)。
if( module_exists('regcode_voucher') && variable_get('regcode_voucher_display', false) ) {
// stuff
}