2010-04-21 9 views
13

간단한 질문 : require_once의 범위는 글로벌입니까? 예를 들어PHP에서 require_once의 범위는 무엇입니까?

는 :

foo를 호출 할 때
<?PHP 

require_once('baz.php'); 

// do some stuff 
foo ($bar); 

function foo($bar) { 
    require_once('baz.php'); 
    // do different stuff 
} 

?> 

, 는 다시 구문 분석 않습니다 baz.php를? 또는 주 PHP 파일에서 이미 필요한 파일에 의존합니까 (동일한 포함 파일에 대해 require_once를 두 번 연속 호출하는 것과 유사)?

나는 전에이 스레드를 보았다,하지만 꽤 질문에 대답하지 않았다 당신의 도움에 대한

Should require_once "some file.php" ; appear anywhere but the top of the file?

감사합니다!

답변

6

require_once()은 실제 파일이 포함되었는지 여부를 판별하기 위해 기본적으로 의존합니다. 따라서 require_once()이라고 부르는 컨텍스트가 아니라 실제 파일이 이전에 필요했는지 여부입니다.

위의 코드에서 이전에 상단에 포함 된 것과 동일한 파일이 될 것이므로 foo() 함수는 baz.php을 다시 구문 분석하지 않습니다.

그러나 require_once()이 성공하면 적용 범위가 적용되므로 foo()에 포함했는지, 아니면 상단에 포함했는지에 따라 다른 결과가 표시됩니다.

+0

귀하의 답변에 모두 감사드립니다. – TMG

2

귀하의 질문에 더 구체적으로 답변하려면 두 번째로 해당 파일에 require_once을 부르면 이미 포함되어 있기 때문에 아무 것도하지 않습니다.

포함에 함수 등이 있으면 어쨌든 함수 안에 포함시키는 데 문제가 있으므로 범위가 적합하지 않습니다. 변수가 정의되거나 처리되는 경우 다시 포함 시키려면 require_once 대신 require을 사용하면 범위의 변수를 다시 정의 할 수 있습니다.

5

그렇지 않습니다. require_once의 추적 기능이 내부 기능에 적용됩니다. 함수 f()는 b.php에 미리 정의되어 있지 않으므로

<?php 
f(); 
?> 

b.php

a.php에

<?php 
require_once('b.php'); 
function f() { require_once('b.php'); echo "inside function f;"; } 
?> 

: 그러나, 다음 스크립트가 오류를 생성한다.

관련 문제