关于PHP中的变量作用于问题

引子:
有文件1.php:

  1. <?php
  2. $conf = array("hello world");
  3. ?>

文件2.php

  1. <?php
  2. include_once("1.php");
  3. function do_sth() {
  4.      global $conf;
  5.      print_r($conf);
  6. }
  7. ?>

文件3.php

 
  1. <?php
  2. include_once("2.php");
  3. do_sth(); // 这里能不能打印出数组内容取决于3.php的上下文环境
  4. ?>

直接执行 3.php 可以打印出数组内容。

下面使用文件4.php来include文件3.php
文件4.php

  1. <?php
  2. wrap(); // 这里不能打印出$conf数组的内容
  3. function wrap() {
  4.     include_once("3.php");
  5. }
  6. ?>

分析
1) 因为1.php 中的$conf数组没有使用global声明,所以1.php中 $conf数组的作用于取决于 1.php的上下文环境;
2) 3.php 直接执行的话,工作的很好,但是一旦被一个函数给包裹住,则$conf 数组不再是一个全局变量,这样do_str() 也就不能按照预期执行了
3) 如果在1.php中也使用global声明一下 $conf , 然后再赋值,就比较靠谱了

结论
1. 不要指望在任何函数外部声明的变量就是全局的
2. 虽然使用global 声明后同样可以确保是一个全局变量,但是这里还是建议使用 $GLOBALS 数组来访问全局变量

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据