Задокументирована ли в PHP специальная обработка exit и die?

Я только что прочитал страницу Выражения в документах PHP, и прямо вверху написано:

Самый простой, но самый точный способ определить выражение: все, что имеет ценность».

Это простое определение включает в себя все функции и большинство языковых конструкций, однако есть несколько языковых конструкций, в которых явно указано, что они не возвращают значения.

Вот список языковых конструкций, которые возвращают значение:

Вот несколько интересных, которые не возвращают значение и, следовательно, не являются выражениями:

Я нахожу dieи exitособенно интересными, потому что их можно использовать как выражения в PHP, несмотря на отсутствие возвращаемых значений. Все следующие строки кода вызывают синтаксическую ошибку, как и ожидалось:

echo 'Hi' or echo 'Bye';

if(echo('foo'))
     return return(1);

$foo['bar'] = isset($foo['bar']) ? unset($foo['bar']) : 0;

if(unset($foo['bar']))
    __halt_compiler() or die;

Однако следующий PHP-код полностью свободен от синтаксических ошибок:

print 'Hi' or print 'Bye';    // Makes sense, print returns a value

if(!die() and exit)           // Wait what's happening here?
    quit(die(exit(quit())));  // die and exit don't have return values (does quit?)

$x = true ? die/2 : 5*exit();
$y = pow(die,7);

isset($_GET['bar']) or die(); // This one is actually pretty commonly used.

function quit(){              
    return exit;
}

Я просмотрел документацию по PHP и не нашел упоминания об этой специальной обработке умереть ()и выйти (). Кто-нибудь из экспертов по PHP знает, документировано ли это где-нибудь. Является ли это предполагаемым поведением и безопасно ли использовать шаблон isset($_GET['bar']) or die();; может ли он внезапно сломаться в будущей версии PHP?

8
задан Mogsdad 15 January 2018 в 04:17
поделиться