Повреждение родительской функции из дочерней функции (PHP Preferrably)

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

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

пример кода:

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";
5
задан Franklyn Tackitt 1 July 2010 в 01:03
поделиться

2 ответа

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";
7
ответ дан 14 December 2019 в 08:40
поделиться

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

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 () / жертвы () и предотвратить нормальное завершение жертвы () (только если вы убиваете скрипт как часть обработчика ошибок).

0
ответ дан 14 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: