【问题标题】:Scope loss in included files in phpphp中包含文件的范围丢失
【发布时间】:2012-09-06 00:04:28
【问题描述】:

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

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

我的档案:

<?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

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

有什么想法吗?谢谢!

【问题讨论】:

    标签: php include scope


    【解决方案1】:

    因为你 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();
    }
    ?>
    

    【讨论】:

    • 这完全正确。我自己尝试了这个,并在 var_dump() 上收到了 NULLS,但是,将包含从函数中移出,一切正常!
    • 嘿Whaddya知道!我可以发誓我试过了!感谢您的帮助!
    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2012-04-05
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多