如何更有效地编写此Drupal代码段?

时间:2011-02-18 03:02:45

标签: php arrays drupal drupal-6 performance

我正在修补一个补丁,以便为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更改。

2 个答案:

答案 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
}