php中包含文件的范围丢失

时间:2012-09-12 22:47:18

标签: php include scope

有一些帖子与此相关,但我没有看到任何接近我正在努力的情况。

我继承了一个相当大的代码库,原设计师采用了一些有趣的设计方法。我正在尝试调用已定义的类的方法。类文件本身设置了一些全局变量。我从一个函数调用这个方法,我也包含了这个文件。该方法运行时,不再定义全局变量。见下文:

我的文件:

<?php //myScript.php

echo("Calling foo(): ");
foo();

function foo() {
   include '../../php/class.bar.php';
   $bar = new bar();
   $bar->doSomething();
}
?>

../../ PHP / class.bar.php:

$GLOBAL_ARRAY_ONE[0] = 'Here I am';
$GLOBAL_ARRAY_ONE[1] = 'JT';

class bar {
   public $itsFoo = array();
   public $itsBar = array();

   public function doSomething() {
      global $GLOBAL_ARRAY_ONE;
      $this->itsFoo[0] = $GLOBAL_ARRAY_ONE[0];
      $this->itsFoo[1] = $GLOBAL_ARRAY_ONE[1];

      var_dump($this->itsFoo);
   }
}

所以,当我运行“myScript.php”时输出为:calling foo(): NULL

我个人不会在这样的脚本中声明全局数组,但我认为没有理由不能访问它们。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

由于include函数内的文件GLOBALS无法在那里定义(class)。您可能想要做的是include class.bar.php以外的foo()

<?php //myScript.php

include '../../php/class.bar.php';

echo("Calling foo(): ");
foo();

function foo() {   
   $bar = new bar();
   $bar->doSomething();
}
?>