php global到底是代表直接使用变量还是代表变量的引用?

查看:72
本文介绍了php global到底是代表直接使用变量还是代表变量的引用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

<?php
    $a=0;
    function test(){
        global $a;
        $a = 1;
    }
    test();
    echo $a;//输出1
?>

在网上查了下,感觉都讲得不彻底!或许我理解不到位!

此处说明:函数外部环境简称外部环境也就是所谓的全局环境,内部环境也就是局部环境.

php 作用域想必都知道,就是全局环境和局部环境彼此独立隔离,互相不能访问各自里的变量.按照之前网上所讲,此处 global 就代表是全局 $a 的同名引用,也就是声明一个局部 $a,并引用全局 $a.

第二:如果此代码没定义全局 $a,那么就是声明一个值为 1 的全局 $a.

但是今天看到静态变量,又对 global 产生疑惑: global 到底是代表直接使用全局变量还是代表全局变量的引用?

解决方案

$GLOBALS['a'] 是外部的全局变量$a本身。

global $a 是外部$a的同名引用。

可以试试这个例子

<?php
    $a = 1;
    function test(){
        unset($GLOBALS['a']);
    }
    test();
    echo $a;
?>

什么都没有输出,因为$a已经被unset了

<?php
    $a = 1;
    function test(){
        global $a;
        unset($a);
    }
    test();
    echo $a;
?>

打印了1

证明删除的只是别名,$GLOBALS['a']的引用,其本身的值没有受到任何的改变。
也就是说 global $a 其实就是$a = &$GLOBALS['a']。调用外部变量的一个别名而已。

这篇关于php global到底是代表直接使用变量还是代表变量的引用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆