2011-08-26 3 views
3

PHP가 include 및 include_once 호출을 실행할 때 여기있는 사람이 알고 있습니까?PHP가 관행을 포함합니다

각 클래스의 시작 부분에 클래스를 가져와야하는 플래시 및 데스크톱 개발 배경에서 왔기 때문에 궁금합니다.

하지만 이제는 더 복잡한 PHP 코드를 작성하기 시작했습니다. 실제로 로딩 시간을 절약해야 할 때 클래스를 포함하는 것이 더 좋을 것 같습니다. 예를 들어, 다음과 같은 사이비의 코드를 살펴 : 나는 이렇게 할 경우

if (I_need_to_check_login) 
{ 
    include_once "Class.class.php"; 
    $C = new Class(); 
} 

이 파일 Class.class.php 매번 코드가 실행되거나 포함 될 것입니다 만 나는 include_once 문을 실행할 때.

저는 약간의 클래스 괴물이며 일반적으로 내 응용 프로그램에서 사용하는 모든 기능에 대한 클래스를 작성하기 때문에 많은 클래스 파일이 있습니다.

+2

[오토로더 전략] (http://php.net/manual/en/language.oop5.autoload.php)을 살펴보십시오. 그것은'include_once' /'require_once'를 사용하는 것보다 더 효율적이며 코드를 단순화합니다. – Phil

답변

4

해석기가 도착할 경우에만 포함됩니다. 예 :

$variable = false; 
if ($variable) { 
    include 'a.php'; 
} else { 
    include 'b.php'; 
} 

이 경우 b.php 만 포함됩니다. 그 동작에 대한 자세한 내용은

: 당신이 include_once 명령을 수행하는 경우 PHP Manual - include

+0

죄송합니다. 매뉴얼 페이지의 어떤 부분에 따르면, 런타임에 코드가 조건부로 포함될 것이라고 언급 되었습니까? 그것은 조건부로 확실히 실행되지만 필자는 아래에 언급 한 바와 같이 PHP가 실행되지 않는 파일을 쉽게 파싱 할 수 있음을 쉽게 증명할 수 있습니다. – gview

+0

@gview 아니요, 당신은 명백히 틀 렸습니다. [this] (http://left4churr.com/demos/inc_test.php) 및 [this] (http://left4churr.com/demos/inc_test.php?b)를 참조하십시오. 그것은 같은 스크립트입니다 -하지만 포함시킬 파일을 선택하십시오. 첫 번째 경우에는 모든 것이 잘 작동합니다.두 번째 경우에는 구문 오류가있는 파일을 포함 시키려고 시도하고 ** 오류를 포함하면 오류가 발생합니다. ** 주석에 언급 한 내용과 완전히 모순됩니다. – NullUserException

+0

예, 제가 잘못했습니다 - 내 테스트 케이스에 바보 같은 오류가있었습니다. 매뉴얼 페이지에는 찾을 수있는 것에 대한 내용이 없지만 링크가 포함 된 이유는 아닙니다. – gview

2

파일은 실제로 단지포함되어 있습니다.

은 그래서 I_need_to_check_loginfalse로 평가되면 - 파일을 쉽게 해당 파일의 첫 번째 줄에 echo "I've been included"; exit;을 추가로 직접 확인 할 수있는 모든

에 포함되지 않습니다.

+1

include_once는 대상 파일이 이미 포함되어 있는지 확인하기 만하면됩니다. 그렇지 않으면 단순히 소스를 다시로드 할 것이고 내용에 따라 이것은 문제가 될 수 있습니다. – gview

+1

@gview : 맞습니다.하지만 나에게 무엇을 말하려고 했습니까? 내가 대답 한 질문은 "내가 이렇게하면 코드가 실행될 때마다 Class.class.php 파일이 포함되거나 include_once를 실행할 때만 파일이 포함될 것입니다." 짧은 대답은 "include_once가 실행될 때만 실행됩니다"입니다. 그것이 당신의 통지와 어떻게 관련되어 있는지 알 수 없습니다. – zerkms

+0

내가 말하는 것은 귀하의 답변을 읽는 방식이며 귀하의 대답이 정확하지 않다고 믿습니다. 포함될 수는 있지만 실행할 수없는 많은 것들이 있습니다. 내가 사용하지 않는 함수 묶음을 선언하는 포함 파일이 있다면, 포함되지만 실행되지는 않습니다. – gview

5

include include_once는 표준 PHP 명령어입니다. 이것은 인터프리터가 프로그램의 흐름에서 하나를 찾으면 include, include_once를 실행 함을 의미합니다. 제어 구조가 include 명령어가있는 코드를 실행하지 않으면이 명령어는 실행되지 않습니다.

예에서 include_once는 I_need_to_check_login이 true 인 경우에만 실행됩니다.

4

예 : $C = new Class();으로 전화해야 할 때마다 파일을 요구하거나 포함해야합니다. 이제 당신이 대신 include_once 문의 할 수있는 것은 : 당신이 이미 그것을 전에 포함 된 경우, 다시 포함이되지 않을 수도 있습니다 의미

if (!class_exists('MyClass')) { 
    include("Class.class.php"); 
} 

. include는 include_once보다 실행이 빠르기 때문에 성능이 향상됩니다.

+0

'class_exists' 체크와 함께'include_once'를 사용하는 것이 잘못된 이유는 무엇입니까? – zerkms

+1

class_exists는 클래스가 이미로드되어 있는지 확인합니다 (예 : 이미 다른 파일에 포함되어있는 경우). - include_once가 이미 파일을 포함하고 있다면 코드를 검사해야합니다. 자세한 내용은 http://stackoverflow.com/questions/4326435/php-include-vs-include-once-speed를 읽어보십시오. STRACE를 실행하여 작동 방식을 확인하는 것이 좋습니다. –