对于php程序员来说,随着php不同版本对于部分函数变量机制的更新改进,往往会让大家因在不同版本下使用同一变量而出现不同结果时而产生疑惑。那么本篇文章主要给大家详细解释下,为什么在PHP5和PHP7版本下,使用同一global变量时会出现不同结果的问题?下面给大家举一个简单易懂的例子。
比如现有一个exl.php的页面运算代码如下:
我们在本地php5版本环境下运行出来的结果是5,如下截图:
那么我们在php7版本环境下运行的结果是3,如下截图:
那么之所以会出现不同运算结果,其实是因为在最新的php7版本中,PHPglobal变量处理机制进行了修改,此版本下global关键字现在只能引用简单变量。所以当我们在本地php5版本环境下运算时,输出的$y的值就是$x+$y=5,此时的global就相当于全局变量使用。而在php7环境下,输出的$y的值却是$y=3,此时global变量只能直接引用简单变量$y。
那么通过以上的示例代码解释,希望本篇文章关于php中global变量在不同版本下运算产生不同结果的问题,对大家遇到相关问题时有所帮助,也希望大家通过此篇文章对不同版本下php global用法有所理解。
简单介绍下,什么是php全局变量global?首先phpglobal作用域不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用。
这里也顺带提下php $GLOBALS变量 即引用全局作用域中可用的全部变量, 在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。注意$GLOBALS 的写法,比如变量$a1,写法为$GLOBALS[‘a1’]。
那么下面用个浅而易懂得例子给大家详细解释下global在php中出现无效的问题:
首先demo1.php页面代码如下:
<?php $site_name = 'CodePlayer'; function sayHi(){ global $site_name; echo "Hello! Welcome to $site_name !"; } ?>
demo2.php页面代码如下:
<?php function include_view_page(){ include 'demo2.php'; sayHi(); } include_view_page(); ?>
当我们访问demo1.php页面,能够正确显示出欢迎语句。然而当我们使用浏览器访问demo2.php页面输出结果却如下:
Hello! Welcome to !
我们在函数include_view_page()中调用sayHi()函数时,demo2.php页面sayHi()函数中global的$site_name却没有被正确识别、生效。
其实当我们在函数include_view_page()中include demo2.php页面时,demo2.php页面的变量$site_name就相当于存放在include_view_page()函数内的作用域中。大家都知道在函数内global一个变量实际上是在函数内建立一个对页面全局变量的引用。而在这个例子中,$site_name变量对于demo1.php而言,它仅仅是include_view_page()函数内的局部变量,因此无法显示global变量,我们进行相关调用时是无法获取到正确的变量和变量值。
在php中,我们尤其需要注意类似上述在函数内include某个页面,导致该页面中变量的作用域发生改变的问题。为了避免这种情况,我们应该尽量减少多层次的include调用,也尽量不要在函数内使用include。此外,我们还可以在demo2.php的页面中将$site_name进行全局变量形式的声明。
//demo2.php <?php global $site_name; $site_name = 'CodePlayer'; function sayHi(){ global $site_name; echo "Hello! Welcome to $site_name !"; } ?>
函数中如何引用全局变量示例如下:
输出的结果如下:
var2 is set to ‘xxxxxx’
var2 is set to ‘eeee’
可见,上面的代码中:
$var2 =&$var1; //1 只对函数内部可见。 而 $GLOBALS[“var2”] =&$var1; //2 在全局范围内可见。
希望本篇文章介绍关于php global出现无效的问题对大家有所帮助!
以上是关于PHP5和PHP7版本下global变量机制有哪些变化(global无效错误)?(代码实测)的详细内容。更多信息请关注PHP中文网其他相关文章!