我刚刚阅读了 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 文档,找不到任何关于 die() 和 exit() 的特殊处理的提及。是否有任何 PHP 专家知道这是否记录在任何地方。这是预期的行为吗,并且该isset($_GET['bar']) or die();
模式可以安全使用;它会在 PHP 的未来版本中突然中断吗?