2017-09-05 71 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; 
    } 
}