2011-02-18 56 views
0

我正在修補Drupal提交到Registration Code module的補丁。總之,是否有更有效的方式來編寫下面的代碼?如何更有效地編寫Drupal代碼片段?

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

好像我應該能夠將其降低到一個if語句&&結合兩個條件,但我還沒有發現語法或必要的PHP陣列功能,將允許我這樣做。

如果上下文有幫助,regcode_voucher子模塊允許用戶在用戶編輯頁面上輸入他們的註冊碼。在我們的網站上,經過「測試」期後,我們希望通過刪除註冊碼字段來簡化註冊表單;但我們希望用戶仍然可以在其帳戶編輯頁面上輸入代碼。上面的代碼是補丁的一部分,它允許繞過regcode的hook_user更改。

+1

我同意沒有必要進一步優化它。 – Berdir 2011-02-18 07:05:43

回答

2

代碼看起來不錯,你想要什麼效率?小的變化可能是:

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

而且我不建議合併如果......,代碼應清晰,容易理解。如果您將這些優化合並在一起,您可以爲實時處理器贏得「微小」毫秒,但卻失去了乾淨的代碼。

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 
} 
+0

包含在regcode_voucher_display中的數組包含各種設置(由管理員表單上的一系列複選框表示)。其中一些複選框表示與是否繞過hook_user實現無關的選項。只有'regform'選項應該確定是否運行hook_user更改。 – 2011-02-18 17:37:12