Ale*_*lex 8 php if-statement constants
在PHP中,如果我像这样定义一个常量:
define('FOO', true);
if(FOO) do_something();
Run Code Online (Sandbox Code Playgroud)
该方法do_something按预期执行.
但如果我没有定义BOO下面的常量:
if(BOO) do_something();
Run Code Online (Sandbox Code Playgroud)
然后do_something也被执行.这里发生了什么?
ale*_*lex 11
BOO将被强制插入字符串BOO,这不是空的,所以它是真的.
这就是为什么有些人不熟悉访问数组成员的原因$something[a].
你应该编码error_reporting(E_ALL)然后给你...
注意:使用未定义的常量HELLO - 在第5行的/t.php中假定为'HELLO'
你可以看看它是否定义了defined().很多人使用以下行,因此在其环境之外访问的PHP文件将无法运行...
<?php defined('APP') OR die('No direct access');
Run Code Online (Sandbox Code Playgroud)
这利用了短路评估 - 如果左侧是真的,那么它不需要运行右侧.
如果启用错误日志记录,则会看到类似以下的错误:
PHP注意:使用未定义的常量BOO-在第N行的文件中假定为'BOO'
发生的情况是,PHP只是随意假设您要使用“ BOO”,而只是忘记了引号。并且,由于''和以外的其他字符串'0'都被视为“ true”,因此条件通过。