php global变量无效问题详解

例、函数内引用全局变量

function global_references($use_globals)
{
global $var1, $var2;
if (!$use_globals) {
$var2 =&$var1; //1

    <?php
    $site_name = 'CodePlayer';

<?php
$var1 = "#####";
$var2 = "&&&&&";

Hello! Welcome to !

您可能感兴趣的文章:

  • php
    传值赋值与引用赋值的区别
  • php 引用(&)详解
  • PHP引用(&)各种使用方法实例详解
  • PHP 引用文件技巧
  • PHP正则表达式的逆向引用与子模式分析
  • php中引用符号(&)的使用详解
  • php引用传值实例详解学习
  • PHP的引用详解
  • 为何说PHP引用是个坑,要慎用

var2 is set to '&&&&&'
var2 is set to '#####'

输出的结果如下:
var2 is set to '&&&&&'
var2 is set to '#####'

先看下面的代码:

可见,上面的代码中:
$var2 =&$var1; //1
只对函数内部可见。

$GLOBALS["var2"] =&$var1; //2
在全局范围内可见。

    <?php

} else {
$GLOBALS["var2"] =&$var1; //2

 代码如下

}
}

可见,上面的代码中:
$var2 =&$var1; //1
只对函数内部可见。

$GLOBALS["var2"] =&$var1; //2
在全局范围内可见。

先看下面的代码:

 

global_references(false);
echo "var2 is set to '$var2'<br/>";
global_references(true);
echo "var2 is set to '$var2'<br/>";
?>

在这里,我们有a.php和b.php两个页面。

复制代码 代码如下:

}
}

在php中,我们尤其需要注意类似上述在函数内include某个页面,导致该页面中变量的作用域发生改变的问题。为了避免这种情况,我们应该尽量减少多层次的include调用,也尽量不要在函数内使用include。此外,我们还可以在b.php的页面中将$site_name进行全局变量形式的声明。

    include_view_page();
    ?>

} else {
$GLOBALS["var2"] =&$var1; //2

实际上,当我们在函数include_view_page()中include
b.php页面时,b.php页面的变量$site_name就相当于存放在include_view_page()函数内的作用域中。众所周知,在函数内global一个变量实际上是在函数内建立一个对页面全局变量的引用。而在我们的例子中,这个$site_name变量对于a.php而言,它只是include_view_page()函数内的局部变量,因此无法global该变量,我们进行相关调用时自然无法获取到正确的变量和变量值。

global_references(false);
echo "var2 is set to '$var2'<br/>";
global_references(true);
echo "var2 is set to '$var2'<br/>";
?>

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。