Я только что прочитал страницу Выражения в документах 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?