2013-11-25 1 views
0

이전에는 전역 배열 ($ v)을 사용했으며 전역 $ v;를 사용하여 함수 내에서이를 참조했습니다. 이제 배열에 관한 모든 것을 캡슐화하려고하므로 클래스를 작성했습니다.함수 내에서 세계화 된 PHP 객체를 어떻게 참조합니까?

function f($x) { 
    $vi->add($x); 
} 

나는 함수 내에서 $ VI를 참조하려면 어떻게 : 그 객체의 메소드를 호출 할 함수 내에서

$vi = new my_v(); 

: 글로벌 맥락에서, 나는 클래스를 인스턴스화?

+1

가능한 중복 [ 참조 : 가변 스코프 란 무엇입니까? ariables는 "정의되지 않은 변수"오류가있는 곳에서 액세스 할 수 있습니까?] (http://stackoverflow.com/questions/16959576/reference-what-is-variable-scope-which-variables-are-accessible-from-where- and) – deceze

+0

그건 그렇고, 글로벌 범위에서 add() 메소드 호출이 잘 작동하기 때문에 클래스가 좋다는 것을 안다. –

+0

나는 던져지고있는 오류가 부작용의 결과라고 말할 때 당황 스럽다. Global $ vi는 실제로 작동합니다. –

답변

1

를 사용하여 글로벌 키워드 :

function f($x) { 
    global $vi; 
    $vi->add($x); 
} 

또한 $GLOBALS 자동 전역 배열을 사용할 수 있습니다

function f($x) { 
    $GLOBALS['vi']->add($x); 
} 

참조 : http://us1.php.net/manual/en/language.variables.scope.php

하는 예를 사용 :의 http://3v4l.org/ERIK8

+0

그게 내가 생각한거야,하지만 PHP는 (5.2.17) 나에게주고있다 ** 치명적인 오류 : 부재 함수에 대한 add() 멤버 함수 호출 ... ** –

+0

@WillFastie 클래스와 같은 소리가 아니다. 제대로 설정. 다른 코드가없는 아주 간단한 테스트 케이스를 설치하십시오. – jszobody

+0

@WillFastie이 작업 예제에서는 두 옵션을 모두 볼 수 있습니다. http://3v4l.org/ERIK8. 작동하지 않는 경우 코드와 관련하여 다른 문제가 발생합니다. – jszobody

관련 문제