Как я могу написать этот фрагмент Drupal более эффективно? - PullRequest
0 голосов
/ 18 февраля 2011

Я работаю над патчем для отправки в модуль Регистрационный код для Drupal. Короче говоря, есть ли более эффективный способ написания кода ниже?

if (module_exists('regcode_voucher')) {
  $cnfg = variable_get('regcode_voucher_display', array('regform' => 'regform'));
  if (empty($cnfg['regform'])) {
    return;
  }
}

Кажется, я должен быть в состоянии сократить его до одного оператора if с &&, объединяющего два условия, но я не нашел синтаксиса или необходимой функции массива php, которая позволила бы мне это сделать. 1008 *

В случае, если какой-то контекст помогает, подмодуль regcode_voucher позволяет пользователям вводить свой регистрационный код на странице редактирования пользователя. На наших сайтах после периода «бета» мы хотим упростить регистрационную форму, удалив поле кода регистрации; но мы бы хотели, чтобы пользователи по-прежнему могли вводить код на странице редактирования своего аккаунта. Приведенный выше код является частью патча, который позволяет обходить изменения в hook_user regcode.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Код выглядит хорошо, какой эффективный вы хотите? Небольшие изменения могут быть:

if (module_exists('regcode_voucher')) {
  $cnfg = variable_get('regcode_voucher_display', null);
  if ($cnfg) {
    // do your actions
  }
}

И я не рекомендую объединять, если ..., код должен быть ясным и более простым для понимания. Если вы объедините их для оптимизации, вы выиграете «крошечные» миллисекунды для реальных процессоров, но потеряете чистый код.

0 голосов
/ 18 февраля 2011

Почему вы возвращаете массив из variable_get, если переменная не найдена? variable_get всегда будет возвращать строку или сериализованный массив (который должен быть не сериализованным). Если я что-то упустил, вы можете использовать array_key_exists ('regcode', variable_get (...)) для проверки ключа массива.

Это должно сработать ... обратите внимание, возвращая "false" из variable_get по умолчанию, если переменная не найдена, что приведет к тому, что условия if не будут совпадать. Лично я считаю, что это более читабельно, чем вложенные операторы if (для условий 3+, которые я бы вложил).

if( module_exists('regcode_voucher') && variable_get('regcode_voucher_display', false) ) {
  // stuff
}
...