例如,如果我有
assert('2<1');
事实证明断言返回为真。我还复制了来自http://php.net/manual/en/function.assert.php的粘贴的示例#2,并且它还将每个断言都评估为真,当时情况显然不是这样。知道可能导致这种情况的原因吗?
编辑 -
<?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
答案 0 :(得分:4)
Assert有3个设置:
(从php.ini发出):
-1:根本不编译 0:在运行时跳过断言
1:执行断言
...
http://php.net/zend.assertions
-1是“生产”,1是发展,零是一个奇怪的中间地带,似乎就像生产一样。
显然,当处于非开发模式时,这意味着断言将始终返回true,从而有效地绕过检查。