php global变量无效

对于PHP初学者而言,在使用global关键字时,可能会发现,在函数内global一个函数外的变量,在某些情况下却无法正确输出该变量(即global变量无效)。下面我们来看一个简单而常见的例子。

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

b.php页面代码如下:

  1. <?php

  2. $site_name =‘CodePlayer‘;
  3. function
    sayHi(){

  4. global $site_name;

  5. echo "Hello! Welcome to $site_name !";

  6. }

  7. ?>

a.php页面代码如下:

  1. <?php
  2. function
    include_view_page(){

  3. include ‘b.php‘;

  4. sayHi();

  5. }
  6. include_view_page();

  7. ?>

上面的例子非常简单,我们希望当我们访问a.php页面,能够正确显示出欢迎语句。不过,遗憾的是,当我们使用浏览器访问a.php页面却发现输出结果如下:

Hello! Welcome to !

也就是说,我们在函数include_view_page()中调用sayHi()函数时,b.php页面sayHi()函数中global$site_name却没有被正确识别、生效。这究竟是怎么一回事呢?

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

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

  1. //b.php

  2. <?php

  3. global
    $site_name;

  4. $site_name =‘CodePlayer‘;
  5. function
    sayHi(){

  6. global $site_name;

  7. echo "Hello! Welcome to $site_name !";

  8. }

  9. ?>

转自:http://www.365mini.com/page/php-global-invalid.htm

时间: 2024-10-07 14:48:20

php global变量无效的相关文章

MySQL设置global变量和session变量

1.在MySQL中要修改全局(global)变量,有两种方法: 方法一,修改my.ini配置文件,如果要设置全局变量最简单的方式是在my.ini文件中直接写入变量配置,如下图所示.重启数据库服务就可以使全局变量生效. 我们打开几个mysql命令行,可以看到所有会话中的变量都生效了,如图 方法二,在不修改配置文件的基础上,使用关键字global设置全局变量 set global autocommit=1; 将autocommit变量的值设置为ON 需要注意的是,使用此方法对global全局变量的设

global变量

在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用, $global $a; $a=123; function f() { echo $a; //错误, } //再看看下面一例 function f() { global $a; $a=123; } f(); echo $a; //正确,可以使用 在函数体外定义的变量,在函数体内不能直接使用,如使用须加global声明. $a = 3; function b(){ echo $a;//无法得到3

Matlab load &amp; global 变量 &amp; length( ) 函数 &amp; msgbox( )函数

Matlab 图像处理 Day7: 1. load 变量: 作用是读取一个 .mat 文件. 2. global 变量: 意思后面声明的变量是全局变量. 3. length( ): % 一般形式为 x = length( A ): 其中A是矩阵,length( )返回的是矩阵行或列数值较大的那个 4.msgbox( ): % 根据matlab自带的帮助文档可以知道 msgbox 函数大致有5种用法,分别是: < i >.msgbox(Message): < ii >.msgbox(

PHP 的一些 global 变量

PHP 的一些 global 变量 来源: <PHP 语言精粹> get _GET: 是从 url 传递过来的比如, http://localhost/test.php?key=k&value=v localhost/test.php 的内容如下: <?php echo 'key == ', $_GET['key'], ' value == ', $_GET['value']; ?> key == k value == v post <!DOCTYPE html>

python 局部local和全局global变量

global和local变量 虽然简单,但是还是记录一下,主要是转载 转载自:http://blog.sina.com.cn/s/blog_436992740102ux8z.html 先看一段代码: 可见 old_price 是个全局变量, final_price 是局部变量 运行结果是: 局部变量拿到外面来如果没有定义的话就不能用的 那全局变量在 def 函数里 可以用吗? 运行结果: 可见, def 定义的函数里可以打印 全局变量 如果想要在 def 定义的函数里,对全局变量 global

Python 修改global 变量

今天在写一个脚本时需要定义一个全局的时间变量,但是在函数中修改后一直不能更新,发现是因为函数是有自己的namespace last_send_time = 0 def test(): last_send_time = 2 print last_send_time #will print 0 #to change it. def test(): global last_send_time last_send_time = 2 print last_send_time From: stackover

global变量:$GLOBALS

例一: <?php $a=1;        //声明一个全局变量$a,初始值为1 $b=6;        //声明一个全局变量$b,初始值为6 //声明一个函数get(),在函数体中使用全局变量$a和$b function get(){ $GLOBALS['a']++; global $b;             //重新定义$b值为null $b++; } get();                     //调用函数get() echo "a=".$a.'<b

Linux下oracle环境变量无效问题

今天在维护oracle数据库时,查看监听的状态,执行 #lsnrctl status 报错: -bash:lsnrctl:command not found.以前并不会这样,仔细想了一下,问题找到了,我是以root远程登录到服务器上,维护oracle时,直接 su oracle,这样操作虽然用户切换为oracle,但是环境变量仍然是root的环境变量,所以会报环境变量错误,正确的命令是su - oracle,这样环境变量也会切换为oracle的环境变量.看一下 su 命令的 man page N

解决wordpress函数get_term_link()参数使用变量无效的问题

做wordpress开发时,需要通过后台设置的某个自定义分类法ID获取该分类的链接,传递ID的变量给get_term_link()函数时,却无法获取该分类的链接.通过查找资料获悉是由于get_term_link()函数和其它常用的wordpress函数不同,该函数不能自行转换变量类型,解决方法是先把字符类变量转换成整数变量才可以正常获取链接. 解决方法: 设定变量是$getID,代码如下: 1 2 3 4 5 <?php $id = intval($getID); $url = get_term