如何让失败的断言返回非零退出代码?

时间:2016-11-22 21:36:51

标签: php-5.6

我刚刚发现了昂贵的方式(即生产失败)

assert_options(ASSERT_BAIL, true);
assert(false);

终止执行而不发出非零退出代码。感觉就在那里,善良才知道。

我该如何解决这个问题?编辑:没有其他影响输出,例如通过ASSERT_CALLBACK抑制警告。

set_error_handler依赖于Assert()发出警告?我还没找到一些选项?

1 个答案:

答案 0 :(得分:0)

您需要使用退出代码

进行回调
<?php
        function assert_failure()
        {
                exit(-1);
        }
        assert_options(ASSERT_BAIL,     true);
        assert_options(ASSERT_CALLBACK, 'assert_failure');
        assert(false);     
?>

将输出:

$ php assert.php
$ echo $?
255

你也可以抛出异常:throw new Exception('Assert failed');而不是退出。

仍然显示警告:

<?php
        if(assert(false) == false) exit(-1);     
?>

将输出:

$ php assert.php
Warning: assert(): assert(false) failed in /home/user/assert.php on line 9
$ echo $?
255