在比较以下情景时,哪一个最快?下面的示例示例代码。
基本上,我想要找出的是使用全球变量的最佳选择。 我存储的全局变量对所有用户都是相同的......它们是应用程序级别值,对于所有用户都是相同的,例如application_name或application_home_page_url ......
我将使用这些应用程序级别值有很多函数,我不想通过参数传递它们,虽然我认为这将是最快的方式..我的选项似乎是使用db查找,或者使用会话变量或全局变量..
当然,您可以通过抛出assoc将其提升到一个新的水平。将数组放入等式中以使其更快/更慢。
我们必须记住的另一个因素是我们在这里讨论的是很多用户。
那么,在单个函数中抛弃/使用这些应用程序级变量的最佳方法是什么?
//for global based approach
$my_global_var1 = "abc";
$my_global_var2 = "xyz";
//for global + array based approach
$my_globals['var1'] = "abc";
$my_globals['var2'] = "xyz";
//for session based approach
$_SESSION['my_global_var1'] = "abc"
$_SESSION['my_global_var2'] = "xyz";
//for session + array based approach
$_SESSION['my_globals']['var1'] = "abc";
$_SESSION['my_globals']['var2'] = "xyz";
//for db based approach
$varname = 'var1';
//or some other way, you may think of
//??
function func1()
{
global $my_global_var1;
global $my_global_var2;
//....
my_var1 = $my_global_var1;
}
function func2()
{
$my_var1 = $my_globals['var1'];
}
function func3()
{
$my_var1 = $_SESSION['my_global_var1'];
}
function func4()
{
$my_var1 = $_SESSION['my_globals']['var1'];
}
$my_var1 = func5($varname)
function func5($varname)
{
return lookup($varname);
}
答案 0 :(得分:2)
我建议使用Registry类。
我确信制作这样一个类的方法不止一种,但我更喜欢使用一个静态类:
class Registry {
private static $values = array();
public static function set($key, $value) {
self::$values[$key] = $value;
}
public static function get($key) {
return self::$values[$key];
}
}
然后,您只需将注册表包含在应用程序的顶部,并在Registry::set('abc', 'xyz');
和Registry::get('abc');
这项技术的一些链接:
http://www.devshed.com/c/a/PHP/Registry-Design-Pattern/
http://www.phpro.org/tutorials/Model-View-Controller-MVC.html#5
答案 1 :(得分:1)
全局变量和会话变量背后的想法是不同的。全局变量用于在单个脚本中使用相同的变量,而不管范围如何。会话用于跨页面存储一个用户的变量。如果我理解你正在尝试做什么,那么使用会话变量可能会更好。
关于速度,尝试使用microtime()测量脚本的执行时间。你可以使用它(注意:输入没有消毒!):
<?php
$start = microtime(true);
if ($_GET['include']) { @include $_GET['include']; }
$end = microtime(true);
echo '<hr />';
echo 'The script executed in: '.(($end - $start)*1000).' milliseconds.';
?>
编辑:
对我上面的帖子发表评论只是让我更了解你要做的事情。实际上,如果这些变量应保持不变,请使用常量。
答案 2 :(得分:0)
如果可能,您应该将变量传递给函数。
使用全局变量的示例:
<?PHP
$Variable = '1234567';
function funcName()
{
global $Variable;
echo $Variable;
}
?>
或者你可以做到
<?PHP
$Variable = '1234567';
funcName($Variable);
function funcName($varPassed)
{
echo $varPassed;
}
?>
SESSION变量用于在多个页面加载或页面中存储特定于用户的设置或变量。它们用于存储会话信息(用户名,密码,最后一页),但您可以完全控制它。 SESSION变量也存储在临时文件中。如果存储的内容是针对个别用户的,那么使用SESSION ...如果没有正确设计索引,MySQL将会堵塞。