我刚刚读过该页面表达式在 PHP 文档中,在顶部它说:
定义表达式的最简单但最准确的方法是“任何具有值的东西”。
这个简单的定义包括所有函数和大多数语言构造,但是有一些语言构造明确声明它们不返回值。
以下是确实返回值的语言结构的列表:
- empty
- eval
- include
- 包含一次
- isset
- list
- require
- 需要一次
- print
以下是一些有趣的函数,它们不返回值,因此不是表达式:
- die
- echo
- exit
- return
- unset
- __halt_编译器
I find die
and 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 的未来版本中突然崩溃吗?
除了运行时到达代码路径之外,PHP 不会检测错误。与许多其他语言不同,它不会在页面“编译”时列出错误 - 因此您只会在执行各自的源代码行时看到错误。
在您的示例中,对返回值的评估exit
or die
从未完成。 PHP 不会报告错误,因为它从未尝试评估结果,因为线程已退出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)