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

时间:2016-09-03 21:21:51

标签: php

例如,如果我有

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

1 个答案:

答案 0 :(得分:4)

Assert有3个设置:

(从php.ini发出):

  

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

-1是“生产”,1是发展,零是一个奇怪的中间地带,似乎就像生产一样。

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