Разрыв родительской функции из дочерней функции (предпочтительно PHP) - PullRequest
5 голосов
/ 01 июля 2010

Мне задали вопрос, как прервать или завершить выполнение родительской функции без изменения кода родительской функции с использованием PHP

Я не могу найти никакого решения, кроме die ();в дочернем элементе, который завершит все выполнение и так далее, после завершения вызова родительской функции.Есть идеи?

Пример кода:

function victim() {
    echo "I should be run";
    killer();
    echo "I should not";
}
function killer() {
    //code to break parent here
}
victim();
echo "This should still run";

Ответы [ 2 ]

7 голосов
/ 01 июля 2010
function victim() {
    echo "I should be run";
    killer();
    echo "I should not";
}
function killer() {
    throw new Exception('Die!');
}

try {
    victim();
} catch (Exception $e) {
    // note that catch blocks shouldn't be empty :)
}
echo "This should still run";
0 голосов
/ 01 июля 2010

Обратите внимание, что исключения не будут работать в следующем сценарии:

function victim() {
  echo "this runs";
  try {
    killer();
  }
  catch(Exception $sudden_death) {
    echo "still alive";
  }
  echo "and this runs just fine, too";
}

function killer() { throw new Exception("This is not going to work!"); }

victim();

Вам понадобится что-то еще, единственное, что более надежно, это что-то вроде установки вашего собственного обработчика ошибок, убедитесь, что все ошибки сообщаются обработчику ошибок, и убедитесь, что ошибки не преобразуются в исключения; затем вызовите ошибку, и ваш обработчик ошибок завершит работу сценария. Таким образом, вы можете выполнить код вне контекста killer () / жертва () и предотвратить нормальное завершение жертвы () (только если вы уничтожите скрипт как часть вашего обработчика ошибок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...