2011-01-15 2 views
5

극적으로 들리는 제목에 대해 유감스럽게도, 모든 유형의 PHP 명령이 예외를 실행하지 못하게하는 방법이 있는지 알고 싶었습니다.죽을 수있는 대안이 있습니까?

예를 들어, die()를 사용하여 스크립트를 죽이면 내 페이지는 include() 함수를 사용하여 가져온 이후 페이지의 HTML의 하단 부분을로드하지 못했기 때문에 절반이 부러졌습니다.

PHP에 "include 기능을 제외하고 더 이상의 명령을 실행할 수 없도록하십시오"라고 말하는 방법이 있습니까?

+1

아마도 die()는 올바른 명령이 아닙니다. 문맥은 무엇입니까? 왜 스크립트를 전혀 죽여야 만합니까? –

+0

아니요, 시간이된다면, 단순히 '죽어야'할 것입니다 ... 죄송합니다. :) 진지하게, 당신이 잘못된 길로 가고있는 것 같습니다. 아직 단순히 뭔가를하는 동안 페이지를 죽이지 마시기 만하면됩니다. 더 나은 오류 처리를 사용하십시오! – deceze

+0

@Felix Kling GET 매개 변수의 값이 보안상의 이유로 3 가지 허용 가능한 값 이외의 값인 경우 스크립트를 죽이는 중입니다. – TJDeatwiler

답변

2

my_die()와 같은 사용자 지정 die() 명령을 사용하여 필요한 파일을 포함해야합니다. 당신은 die()를 오버라이드 할 수 없으며 당신이 추구하는 것을 할 수있게 해주는 다른 함수도 없을 것입니다.

0

아무 이유없이이 작업을 수행 할 수 없습니까?

if(something didn't work) { 
    include('footer.php'); 
    die(); 
} 

자주 사용하는 경우 기능으로 바꾸십시오.

function finish_and_die($message) { 
    print $message; 
    include('footer.php'); 
    exit; 
} 
+0

아니요. 페이지에 다양한 레벨의 파일을 1 개 이상 포함하고 처리 부분이 가운데에 있기 때문에 다른 방법이 있으면 주문을 걱정할 필요가 없습니다. – TJDeatwiler

0

당신은 같은 것을 시도해 볼 수도 있습니다 :

if(is_secure($_GET['value'])) // Whatever you're using to check if the value is allowed 
{ 
    // Page content goes here 
} 

그 방법을 다른 모든 포함 및 페이지 처리 코드가 계속 호출되는 것입니다.

또는 유효하지 않은 경우 예외를 throw하고 페이지 코드 작성 방법을 알고있는 예외 처리기가 있어야합니다.

11

당신은 전체 스크립트를 죽이지 않고, 포함 된 파일을 "종료"를 return를 사용할 수 있습니다

test1.php

<?php 
include 'test2.php'; 
echo 'foo'; 

test2.php

<?php 
echo 'bar'; 
return; 
echo 'baz'; 

출력을 :

barfoo 
+0

스크립트를 계속 진행하는 데 유용한 방법입니다. 네가 좋아하는대로 돌려주는 것은 다 처리 해줘. 고마워. – Andrew

-1

출력 버퍼링과 결합 된 OOP 접근법을 사용하는 경우 다음과 같이 문제를 해결할 수 있습니다.

Controller 클래스 (논리가있는 곳)에는 Template 클래스의 인스턴스 인 멤버가 있습니다. 컨트롤러 클래스는 템플릿을 렌더링하는 __destruct 방법을 가지고

exit() 또는 die()가 호출 될 때, 컨트롤러 객체의 __destruct 방법이 차례로 템플릿 객체의 render 메소드를 호출하는 호출됩니다.

+0

로직이 컨트롤러가 아닌 모델에 속해 있습니다 ... – netcoder

+1

비즈니스 로직이 컨트롤러에 속합니다. 스토리지/데이터 로직은 모델에 속합니다. 표시 논리는 뷰에 속합니다. – Stephen

+0

흥미롭게도 이것은 템플릿을 렌더링하기위한 프레임 워크를 구축 한 방법입니다. :) – Spechal

1

exit()는 실행을 중지하고 등록 된 exit 핸들러를 실행합니다.

예외를 던지면 주변 try가있는 곳까지 발생합니다. 최상위 수준까지 시도가 없으면 스크립트의 모든 실행이 종료됩니다.

글로벌 범위에서 반환하면 현재 포함 파일에서 파일의 포함/요구 사항을 반환합니다.

개인적으로 예외 처리 및 try/throw를 사용하는 것이 좋습니다.

관련 문제