2017-09-05 98 views
1

使用PHP 5.6,並將在此特定應用程序的未來12-18個月內轉移到7.0。所以我們有一個非常大的全局配置文件 - 現在可以保存近100個變量(每個更新都會得到更多)。正如你所期望的那樣,這個配置文件被應用程序中的每個腳本頁面調用,但並非所有配置值都在所有情況下使用 - 但爲了方便起見,我們將它們全部放在同一個文件中。但我在想,也許將值放入函數中會更有效率,但由於我不是PHP語言(或任何語言)的架構師,因此我不知道使用函數是否更高效,更少高效,或幾乎沒有區別。PHP陣列或功能 - 在這種情況下效率更高

所以這裏是一個示例場景。在我們的配置文件中,我們有這樣的:

$g['user']['enable_username_change'] = true; 
$g['user']['enable_image_change'] = true; 
$g['user']['display'] = "[LASTNAME], [FIRSTNAME]"; 
$g['user']['sort_by'] = "[LASTNAME]"; 
$g['user']['default_locale'] = "english"; 
$g['user']['profile_page'] = file_get_contents('profile_template.html'); 

這些值可用於所有腳本,但只有少數人需要它們。很顯然,我們通過只是在做這樣的事情訪問它們:

if ($g['user']['enable_username_change'] == true) { 
    // the code to enable it ... 
} 

所以我想換做這樣的事情這工作(如果它會創造更多的效益)的方式:

function user__getGlobalConfig($in_param_name) { 
    // DEFINE THE VALUES 
    $g['user']['enable_username_change'] = true; 
    $g['user']['enable_image_change'] = true; 
    $g['user']['display'] = "[LASTNAME], [FIRSTNAME]"; 
    $g['user']['sort_by'] = "[LASTNAME]"; 
    $g['user']['default_locale'] = "english"; 
    $g['user']['profile_page'] = file_get_contents('profile_template.html'); 

    if (isset($g['user'][$in_param_name] == true) { 
     return $g['user'][$in_param_name]; 
    } else { 
     return false; 
    } 

} 

然後我們將訪問這樣的:

if (user__getGlobalConfig('enable_username_change') == true) { 
    // the code to enable it ... 
} 

所以它似乎是在file_get_contents()函數類型的值只會得到讀取函數調用時,我相信會更有效率,但我是個你錯了。其他真實/錯誤或簡單的基於文本的值似乎並不表示他們會是一個很大的效率增益,但我在這裏提出 - 任何科學或基於事實的推理,爲什麼一種方法比另一種更有效?

謝謝。

+0

您的應用程序目前正在遭受痛苦,還是會隨心所欲? – deg

+0

將您的設置變量移至函數中__無變化___您仍然聲明相同的值數組,現在在函數中。每次你將調用你的函數 - 數組將被重新創建。 –

+0

沒有必然的痛苦,但隨着配置文件的增長,想盡可能提高效率 – OneNerd

回答

2

如果您使用函數方法,則應該對其進行編碼,以便它不會每次都重新創建數組,通過使用靜態變量來緩存設置。特別是,每次查找設置時,都不希望它調用file_get_contents()

function user__getGlobalConfig($in_param_name) { 
    static $g; 
    if (!isset($g)) { 
     $g = array(); 
     // DEFINE THE VALUES 
     $g['user']['enable_username_change'] = true; 
     $g['user']['enable_image_change'] = true; 
     $g['user']['display'] = "[LASTNAME], [FIRSTNAME]"; 
     $g['user']['sort_by'] = "[LASTNAME]"; 
     $g['user']['default_locale'] = "english"; 
     $g['user']['profile_page'] = file_get_contents('profile_template.html'); 
    } 
    if (isset($g['user'][$in_param_name])){ 
     return $g['user'][$in_param_name]; 
    } else { 
     return false; 
    } 
}