source

내부 기능에서 외부 기능을 종료할 수 있는 방법이 있습니까?

lovecheck 2023. 10. 24. 21:25
반응형

내부 기능에서 외부 기능을 종료할 수 있는 방법이 있습니까?

PHP 내에서 다른 기능을 호출하는 기능이 하나 있다면 전체 스크립트를 죽이지 않고 호출된 기능이 호출자 기능에서 종료되도록 할 수 있는 방법이 있습니까?

예를 들어, 제가 다음과 같은 코드를 가지고 있다고 가정해 보겠습니다.

<?php
function funcA() {
    funcB();
    echo 'Hello, we finished funcB';
}

function funcB() {
    echo 'This is funcB';
}
?>
<p>This is some text. After this text, I'm going to call funcA.</p>
<p><?php funcA(); ?></p>
<p>This is more text after funcA ran.</p>

안타깝게도 funcB 안에서 funcA가 끝나지 않게 하고 싶은 무언가를 발견하면 전체 PHP 스크립트를 종료해야 할 것 같습니다.이 일을 해결할 방법이 없을까요?

funcB()의 결과를 확인하기 위해 funcA()에 무엇인가를 쓸 수 있다는 것을 알고 있지만, 저의 경우 funcA()의 내용에 대한 통제권이 없고 funcB()의 내용에 대한 통제권만 있습니다.

이 예를 좀 더 구체적으로 설명하자면, 저는 이 예에서 워드프레스와 함께 일하고 있습니다.나는 get_template_part() 함수에 후크를 걸며, 내 후크가 실행된 후 호출되는 locate_template() 함수를 통해 워드프레스가 실제로 파일을 요구/포함하는 것을 막으려고 합니다.

조언해 주실 분 계신가요?

예외 입력funcB그것은 처리되지 않습니다.funcA

<?php
  function funcA() {
     try
     {
        funcB();
        echo 'Hello, we finished funcB';
     }
     catch (Exception $e) 
     {
        //Do something if funcB causes an error, or just swallow the exception
     }
  }

  function funcB() {
     echo 'This is funcB';
     //if you want to leave funcB and stop funcA doing anything else, just
     //do something like:
     throw new Exception('Bang!');
  }
?>

제가 볼 수 있는 유일한 방법은 예외를 사용하는 것입니다.

function funcA() {
    funcB();
    echo 'Hello, we finished funcB';
}

function funcB() {
   throw new Exception;
   echo 'This is funcB';
}
?>
<p>This is some text. After this text, I'm going to call funcA.</p>
<p><?php  try { funcA(); } catch (Exception $e) {} ?></p>
<p>This is more text after funcA ran.</p>

못생겼지만 PHP5에서 작동합니다.

어쩌면...

해결책은 아니지만 exit()에서 "register_shutdown_function('shutdown';)"을 요청할 때 호출되는 다른 함수를 후크할 수 있습니다.그리고 어떻게든 이 일을 다시 계속하게 하거나 당신의 만족을 만족시킬 수 있게 하는 것입니다.

<?php
function shutdown()
{
    // This is our shutdown function, in 
    // here we can do any last operations
    // before the script is complete.

    echo 'Script executed with success', PHP_EOL;
}

register_shutdown_function('shutdown');
?>

언급URL : https://stackoverflow.com/questions/5747411/any-way-to-exit-outer-function-from-within-inner-function

반응형