PHP的一个全局变量如其引用了一个局部变量的地址

WBOY
Release: 2016-06-13 13:13:14
Original
929 people have browsed it

PHP的一个全局变量如果引用了一个局部变量的地址

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
    $b = "dasdf";
    function abc(){
        $a = "abc";
        global $b;
        $b = &$a;
        echo $b."inner;";
    }
    abc();
    echo $b.";";

Copy after login


在函数内部输出b的时候,是abc,但是离开函数后,输出b,又恢复成dasdf的初始值,这是怎么回事呢?按理说,引用了一个局部变量的地址,这个局部变量销毁后,b的值应该是空啊。

------解决方案--------------------
在手册:
http://www.php.net/manual/zh/language.references.whatdo.php#example-251
如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。
原因如下:
把 global $var; 当成是 $var =& $GLOBALS['var']; 的简写。从而将其它引用赋给 $var 只改变了本地变量的引用。
------解决方案--------------------
$b = "dasdf";
function abc(){
$a = "abc";
global $b; //这是对 $GLOBALS['b'] 的引用
$b = &$a;
$GLOBALS['bb'] = & $a;
echo $b."inner;";
}
abc(); //abcinner;
echo $b.";"; //dasdf;
echo $bb; //abc

------解决方案--------------------
记住php的两个概念,所有变量都是指针,所有作用域不同的变量是不同的变量,即可
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template