2012-09-12 4 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도 아닙니다). 당신이 아마하고 싶은 (foo()의) 외부 include class.bar.php이다 :

<?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 알아! I coulda는 그것을 시험해 보았다! 도와 주셔서 감사합니다! – eggmatters

관련 문제