2016-11-22 55 views
0

我剛發現的昂貴的方式(即,無法在生產),該我應該如何得到一個失敗的斷言返回一個非零的退出代碼?

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

終止執行而不發出一個非零退出代碼。在這個意義上說,善良只知道。

我該如何補救?編輯:在不影響輸出的情況下,例如通過ASSERT_CALLBACK抑制警告。

set_error_handler依靠Assert()發出警告?我沒有找到一些選項?

回答

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 
+0

感謝,但也抑制了警告。如果沒有:http://i.imgur.com/aclJyXf.png With:http://i.imgur.com/H5LLeR2.png。我已經更新了我的問題,以澄清退出代碼是我想改變的唯一想法。 – ChrisJJ

+0

assert返回一個布爾值,'if(assert(false)== false)exit(-1);'將執行警告並返回255,不要忘記刪除assert_bail。 – cpatricio

+0

你建議通過手動添加一個exit()給assert的每個調用來設置退出代碼? – ChrisJJ

相關問題