2016-11-22 6 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 С: http://i.imgur.com/H5LLeR2.png. Я обновил свой вопрос, чтобы уточнить, что код выхода является единственным, что я хочу изменить. – ChrisJJ

+0

assert возвращает логическое значение 'if (assert (false) == false) exit (-1);' будет делать предупреждение и возвращать 255, не забудьте удалить assert_bail. – cpatricio

+0

Вы предлагаете установить код выхода, вручную добавив exit() для каждого вызова assert? – ChrisJJ

 Смежные вопросы

  • Нет связанных вопросов^_^