无论条件如何,断言都会返回 true

zoj*_*wek 5 php

例如,如果我有

assert('2<1');
Run Code Online (Sandbox Code Playgroud)

事实证明,断言返回 true。我还从http://php.net/manual/en/function.assert.php复制粘贴示例 #2 ,并且它还将每个断言评估为 true,而事实显然并非如此。知道是什么原因造成的吗?

编辑 -

<?php
    var_dump(assert('2<1'));
?>
Run Code Online (Sandbox Code Playgroud)

输出是

true
Run Code Online (Sandbox Code Playgroud)

如果我在http://sandbox.onlinephpfunctions.com/运行此命令,断言将按预期失败。然而,这在我的测试服务器上并没有发生。

编辑 #2 - PHP 版本:

PHP 7.0.9-1+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.9-1+deb.sury.org~trusty+1, Copyright (c) 1999-2016, by Zend Technologies
Run Code Online (Sandbox Code Playgroud)

Jon*_*nix 5

断言有 3 个设置:

(来自 php.ini):

-1: 根本不编译
0: 在运行时跳过断言
1: 执行断言
...
http://php.net/zend.assertions

-1 是“生产”,1 是开发,0 是一个奇怪的中间立场,看起来像生产。

显然,在非开发模式下,这意味着断言将始终返回 true,从而有效地绕过检查。