例如,如果我有
assert('2<1');
结果是断言返回为真。我还复制粘贴了示例#2从http://php.net/manual/en/function.assert.php,它也评估每一个断言为真,当这显然不是情况。知道是什么引起的吗?
编辑
<?php
var_dump(assert('2<1'));
?>
输出
true
如果我在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
Assert有3个设置:
(from php.ini):
-1:根本不编译
0:在运行时跳过断言
1:执行断言
…http://php.net/zend.assertions
-1表示"生产",1表示开发,0表示一个奇怪的中间地带,看起来像生产。
显然,在非开发模式下,这意味着assert将始终返回true,有效地绕过检查。