2012-09-12 56 views
3

有幾個職位與此相關,但我沒有看到任何接近我正在努力的情況。在包含的文件中的範圍損失在PHP

我已經繼承了一個相當大的代碼庫,原始設計師採用了一些有趣的設計方法。我試圖調用一個定義類的方法。類文件本身有一些全局變量集。我從一個函數中調用這個方法,其中也包含了這個文件。當方法運行時,全局變量不再被定義。請看下圖:

我的文件:

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

我個人不會聲明像這樣的腳本中的全局數組,但我沒有理由不能訪問它們。

任何想法?謝謝!

回答

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(); 
} 
?> 
+0

這是完全正確的。我自己嘗試了這個,並且在var_dump()上接受了NULLS,但是,將這些包含函數移出這個函數讓它一切正常! – nageeb

+0

嘿Whaddya知道!我發誓我試過了!謝謝您的幫助! – eggmatters

相關問題