Мне было предложено разбить или закончить выполнение родительской функции без изменения кода родителя, используя PHP
Я не могу найти решение, кроме die (); в child, который завершит все выполнение, и так что все, что закончится после вызова родительской функции. Есть идеи?
пример кода:
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";
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";
Обратите внимание, что Исключения не будут работать в следующем сценарии:
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 () / victim () и не допустить, чтобы функция «жертва» () завершилась нормально (только если вы убили скрипт как часть обработчика ошибок).