Мне бросили вызов, как повредить или закончить выполнение родительской функции, не изменяя код родителя, с помощью 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";
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 () / жертвы () и предотвратить нормальное завершение жертвы () (только если вы убиваете скрипт как часть обработчика ошибок).