PHP未定义的常量测试

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,这不是空的,所以它是真的.

CodePad.

这就是为什么有些人不熟悉访问数组成员的原因$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)

这利用了短路评估 - 如果左侧是真的,那么它不需要运行右侧.


Ano*_*mie 5

如果启用错误日志记录,则会看到类似以下的错误:

PHP注意:使用未定义的常量BOO-在第N行的文件中假定为'BOO'

发生的情况是,PHP只是随意假设您要使用“ BOO”,而只是忘记了引号。并且,由于''和以外的其他字符串'0'都被视为“ true”,因此条件通过。