【发布时间】:2015-08-19 04:36:01
【问题描述】:
在 $GLOBALS 范围内声明变量和声明大写变量之间有什么区别(如果有)?
我四处寻找答案,这里有一些有趣信息的链接,但我没有找到问题的答案。
PHP global in functions
what is the difference between GLOBALS and GLOBAL?
http://php.net/manual/en/language.variables.scope.php
http://php.net/manual/en/reserved.variables.globals.php
How to declare a global variable in php?
一个小测试告诉我们:
$FOO='BAR';
$GLOBALS['foo']='bar';
function ufoo(){ echo $GLOBALS['FOO']; }
function lfoo(){ echo $GLOBALS['foo']; }
ufoo(); //outputs BAR
lfoo(); //outputs bar
关于使用常量:这里描述了一些限制,所以它们对我不起作用。 http://php.net/manual/en/language.constants.php 此外,定义为对象或数组的常量将通过在我的错误日志中添加行来占用磁盘空间:
class foo_bar{
var $a;
var $b;
}
$foo_bar_object=new foo_bar();
$foo_bar_object->a='foo';
$foo_bar_object->b='bar';
define('FOO_BAR_OBJECT',$foo_bar_object);
$foo_bar_array=array('foo','bar');
define('FOO_BAR_ARRAY',$foo_bar_array);
print_r(FOO_BAR_ARRAY);
print_r(FOO_BAR_OBJECT);
PHP 警告:常量只能计算为标量值
PHP 警告:常量只能计算为标量值
PHP 注意:使用未定义的常量 FOO_BAR_ARRAY - 假设 'FOO_BAR_ARRAY'
PHP 注意:未定义常量的使用 FOO_BAR_OBJECT - 假定为“FOO_BAR_OBJECT”
请减少有关使用 $GLOBALS 的不良做法的帖子。它在 php 中,如果以正确的方式使用,它会很有用。就像任何事情一样,并不是因为某些人滥用某些东西而每个人都应该避免它。
【问题讨论】:
-
将变量名全大写对其本身没有影响。只有特定的保留超全局变量(
$GLOBALS或$_REQUEST)是超全局变量。 - 常量是不同的东西,按照惯例只有全大写。关于对象作为常量的问题部分完全没有意义。 -
感谢@Tim Ogilvy 的编辑
标签: php global-variables