PHP 用户定义的全局变量
示例
任何函数或类之外的范围都是全局范围。当PHP脚本包含另一个脚本(使用include或require)时,范围保持不变。如果脚本包含在任何函数或类的外部,则其全局变量包含在同一全局范围内,但是如果脚本包含在函数内部,则所包含脚本中的变量位于函数的范围内。
在函数或类方法的范围内,global关键字可以用于创建访问用户定义的全局变量。
<?php $amount_of_log_calls = 0; function log_message($message) { //从函数范围访问全局变量 //需要这个明确的陈述 global $amount_of_log_calls; //对全局变量的更改是永久的 $amount_of_log_calls += 1; echo $message; } //在全局范围内时,可以使用常规全局变量 //没有明确说明“全局$variable”; echo $amount_of_log_calls; //0 log_message("第一条日志消息!"); echo $amount_of_log_calls; //1 log_message("第二条日志消息!"); echo $amount_of_log_calls; //2
从全局范围访问变量的第二种方法是使用特殊的PHP定义的$GLOBALS数组。
$GLOBALS数组是一个关联数组,其全局变量的名称为键,该变量的内容为该数组元素的值。注意$GLOBALS在任何范围内如何存在,这是因为$GLOBALS是一个超全局变量。
这意味着该log_message()函数可以重写为:
function log_message($message) { //通过访问全局$amount_of_log_calls变量 //$GLOBALS数组。不需要'global$GLOBALS;',因为它 //是一个超全局变量。 $GLOBALS['amount_of_log_calls'] += 1; echo $messsage; }
有人会问,为什么同时使用global关键字$GLOBALS来获取全局变量的值呢?主要原因是使用global关键字会将变量带入范围。然后,您将无法在本地范围内重用相同的变量名。