美文网首页
PHP学习之global变量

PHP学习之global变量

作者: 哈啰于先生 | 来源:发表于2017-02-20 17:00 被阅读0次

php的变量分为三类:局部变量,全局变量,静态变量
在一段php脚本中<?php >,变量可以在任意位置声明,作用域的意思是指变量在脚本中的使用范围。
同样php的作用域分为三类:1、local(局部作用域) 2、global(全局作用域) 3、static(静态作用域)

local和global作用域

通常情况local和global作用域是容易混淆的,如何区分这两种作用域呢?规则如下:

1、函数外部声明的变量拥有全局作用域,只能在函数外部访问。
2、函数内部声明的变量拥有局部作用域,只能在函数内部访问。

请看下面一段

<?php 
$var = '1'; //全局变量
function foo(){
    $var = '2';//局部变量
}
foo();
echo $var;
?>
很明显打印的结果是:1

虽然两个变量名都叫var,但是确实完全不同的两个变量,也是两种不同的作用域,打印出的很明显是全局的变量。

global关键字

我们经常会遇到一种情况,在函数外部声明了一个全局变量后,我们想在函数内部访问或者修改这一全局变量,这里我们就需要使用一个叫global的关键字来实现。

还用刚刚那段代码,我们想在foo()函数内部修改$var的值,像上面那样写法肯定是不行,

function foo(){ 
    $var = '2';//这里只是相当于重新定义一个局部变量,只不过名字恰好跟var是相同的
}

我们需要借助global关键字来实现,

<?php 
$var = '1';//全局变量
function foo(){
    global $var;//在函数内创建一个局部变量,使用global关键字使其成为全局变量的同名引用
    $var = '2';
}
foo();
echo $var;
?>
打印的结果是:2

$GLOBALS

说到global关键字,就不得不提$GLOBALS,$GLOBALS是超全局变量,在生成全局变量的时候,PHP 同时在名为 $GLOBALS的数组中存储了所有的全局变量。

<?php 
$var = '1';//全局变量,即$GLOBALS['var'] = '1'
function foo(){
    global $var; //全局变量的引用,即 $var = &$GLOBALS['var']
    $var = '2';
}
foo();
echo $var;
?>

有兴趣的童鞋可以打印下var_dump($GLOBALS);看看结果。
结合unset()方法会更容易理解,看如下两段代码

第一段
<?php 
$var = '1';//全局变量,即$GLOBALS['var'] = '1'
function foo(){
    global $var; //全局变量的引用,即 $var = &$GLOBALS['var']
    $var = '2';
    unset($var);
}
foo();
echo $var;
?>
打印结果是:2
第而段
<?php 
$var = '1';//全局变量,即$GLOBALS['var'] = '1'
function foo(){
    global $var; //全局变量的引用,即 $var = &$GLOBALS['var']
    unset($var);
    $var = '2';
}
foo();
echo $var;
?>
打印结果是:1

因为我们知道global是生成一个全局变量的别名引用(类似于桌面上一个文件跟它的快捷方式)。引用的值修改后,全局变量的值也就修改了,在第一段代码中,修改了快捷方式的内容,原文件的内容也得到了修改,然后又删除了快捷方式(unset($var);),所以结果是修改后的值。
但是在第二段代码中,在$var = '2';之前使用了unset($var);方法销毁了引用变量,所以导致全局的变量值并未修改。

再看一段代码

<?php 
$var = '1';//全局变量,即$GLOBALS['var'] = '1'
function foo(){
    global $var; //全局变量的引用,即 $var = &$GLOBALS['var']
    unset($GLOBALS['var']);
    $var = '2';
    //或者在此调用unset($GLOBALS['var']);
}
foo();
echo $var;
?>
打印结果都是空

因为全局变量销毁了,引用也销毁了(原文件没了,快捷方式也没了)

相关文章

  • PHP学习之global变量

    php的变量分为三类:局部变量,全局变量,静态变量在一段php脚本中,变量可以在任意位置声明,作用域...

  • 高效率的PHP写法(变量+数组+架构)

    变量 4.1及时销毁变量 数组、对象和GLOBAL变量在PHP 中特别占内存的,这个由于PHP的底层的zend引擎...

  • php函数

    局部变量---动态变量 局部变量---静态变量 全局变量---global 全局变量---GLOBALS PHP传...

  • PHP global 关键字、Static 作用域

    PHP global 关键字global 关键字用于函数内访问全局变量。 在函数内调用函数外定义的全局变量,我们需...

  • php变量和数据类型

    php中的变量 PHP中的变量声明 PHP中的变量的使用 PHP中的数据类型之整型 PHP数据类型之浮点类型和布尔...

  • PHP中一些函数方法

    php自定义函数之递归函数 php自定义函数之静态变量 php​ 使用系统内置函数 亚麻跌”是PHP学习时间处理的...

  • PHP关键字

    static/global(变量范围) 变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变...

  • PHP Global定义全局变量使用说明

    Global是php中一个比较特殊的命令,大家直接叫他超级全局变量了,下面我来介绍我今天在使用Global定义全局...

  • 2018-08-24

    九层之台,起于累土。 今天我们来学习PHP中的累土--变量。 --------------------------...

  • 2019-03-11 PHP学习笔记之PHP的基本语法(2)

    参考资料:《细说PHP》、《PHP、MySQL与JavaScript学习手册》 变量的类型 变量类型指保存在该变量...

网友评论

      本文标题:PHP学习之global变量

      本文链接:https://www.haomeiwen.com/subject/jdlewttx.html