2017-02-03 1 views
0

간단한 질문 - 다른 사람의 코드와 작업 중이므로 내가 작업중인 코드 이외의 코드를 수정하면 업데이트 가능성이 떨어질 수 있습니다. 초기화가 함수 내부의 'global'키워드와 함축되어 있는지 궁금합니다. 즉에 .... 나는 그들이 사용되는 기본 범위 변수를 초기화하는 것을 선호PHP 전역 범위 및 변수 초기화

// some code 
$foo = ""; // any initialization value 
function myFunc() { 
    global $foo; 
} 
// other code 

// some code 
function myFunc() { 
    global $foo; 
} 
// other code 

합리적으로 비슷한 ...하지만, 언급 한 바와 같이, 그에 나를 필요 이 경우 외부 코드를 변경하십시오.

답변

0

global 문은 현재 함수가 변수를 참조 할 때 로컬 범위가 아닌 전역 범위에서 변수에 액세스한다는 진술만을 제공합니다. 변수 자체의 값에는 아무런 영향을 미치지 않습니다.

즉, 해당 함수 내에서 $foo에 대한 참조는 모두 $GLOBALS['foo']과 동일하게 취급되어야한다는 것을 PHP에 알립니다. 할당하면 전역 변수가 할당되고 전역 변수를 읽으면 전역 변수에 액세스합니다.

+0

좋아요,하지만 이미 그렇게 많이 추측했습니다. 둘은 본질적으로 동등한가, 그렇지 않은가? 예를 들어 $ foo = ""가 첫 번째 예제의 함수 안에 있다고 상상해보십시오. – Scott

+0

내가보기에는이 오래된 코드가 아직 evals를 사용하여 PHP에서 지원되지 않는 물건을 만들려고하고 있다는 점에서 문제가 있습니다. 우리는 그 (것)들을 제거하는 과정에있다, 그러나 큰 일이다. 이 경우, 'eval'd 부분은 함수 호출에 랩핑됩니다. 따라서 추가 함수를 추가하고 'global'을 넣으면 전역 범위 함수에 액세스하지만 동일한 변수에 다른 전역 참조를 추가하지 않으면 eval 된 코드가 사용되지 않습니다. 내 질문은 이것이 어떤 두통을 일으킬 지 여부입니다. 결국 우리는 모든 쓰레기를 찢을 것이지만, 그 동안 나는 할 수있는 한 최선을 다해야합니다. – Scott

+0

함수에서 할당을 수행하면 전역 변수에 할당됩니다. 필요한 경우 변수를 만듭니다. 그러나 글로벌 선언만으로는 변수를 만들 수 없습니다. – Barmar