【发布时间】:2011-04-04 04:23:48
【问题描述】:
当我想使用在函数外部声明的变量时,是否有最佳实践/建议:
global $myVar$GLOBALS['myVar']
谢谢。
【问题讨论】:
标签: php variables function global
当我想使用在函数外部声明的变量时,是否有最佳实践/建议:
global $myVar$GLOBALS['myVar']谢谢。
【问题讨论】:
标签: php variables function global
好吧,您应该只在有限的情况下使用全局变量,但要回答您的问题:
global 可能会稍微快一些(它很少会产生影响)。$GLOBALS(不是$GLOBAL)更具可读性,因为每次你看到它,你就知道你正在访问/更改一个全局变量。这对于避免严重的错误至关重要。unset($GLOBALS['varname']),而不是global $varname; unset($varname);。关于第 1 点和第 2 点,我会在这里quote Sara Golemon:
这对您使用
$GLOBALS数组意味着什么?没错,global关键字在技术上更快。现在,我想在这里非常清楚一件事。使用全局变量作为本地化 [编译变量] 所带来的轻微速度负担需要认真权衡五年内查看代码并知道$foo来自全局范围的可维护性。something_using($GLOBALS['foo']);总是比global $foo; /* buncha code */ something_using($foo);更清楚你的底线,不要吝啬和愚蠢..
【讨论】:
global 来检测哪些变量是本地变量,2) 并非每个人都使用 IDE(我记得在 Facebook 上阅读过更多的人没有使用改用 vim 之类的东西,至少我在 vim 中对 PHP 文件的语法突出显示没有检测到变量范围)和 3)即使您的 IDE 检测到全局变量,$GLOBALS 也会比您选择的任何颜色更清晰,即使它是绿色而不是粉红色.
在函数顶部使用global。这样,您可以轻松查看使用了哪些全局变量。
【讨论】:
@global) 声明您使用的全局变量。
global $var; 等价于$var =& $GLOBALS['var']。
有人建议它比使用$GLOBALS 更快,但事实并非如此。如果您只使用该变量一次,$GLOBALS 会更快,因为您不会浪费时间进行赋值。
但是,如果您确实多次使用该变量,则使用 global(或等效赋值)会更快,因为只在数组中搜索一次 var 键。
这就是速度。但是,速度差异真的很小,可读性更重要。然而,不同的人对可读性有不同的偏好——我更喜欢global,其他一些人在这里回答更喜欢$GLOBALS,所以由你决定什么看起来更好。
【讨论】:
global $var 比$var =& $GLOBALS['var'] 更快。第二段完全是错误的。
global 只是一个哈希查找加上一个已编译变量的存储。 $GLOBALS 变体需要两次哈希查找。它没有存储在任何变量中,但在性能方面,它与存储在编译变量中没有任何区别。
你真正应该做的是将变量传递给函数,而不是使用全局变量。
如何通过将变量作为引用参数传递来更改函数外部变量的示例:
function myFunc(&$myVar)
{
$myVar = 10;
}
$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
【讨论】:
function writeFunction(&$output, $str) { $output .= $str; } 并使用它:writeFunction($output, "something");