assert
  (PHP 4, PHP 5, PHP 7, PHP 8)
assert — Проверяет утверждение
  
 
  Описание
  
  
  
   Утверждения помогают отлаживать код.
   В одном случае утверждениями проверяют, выполняются ли предварительные условия:
   корректные условия вычисляются как значение true, а ложность условий
   указывает на ошибки программирования.
   В другом сценарии проверяют доступность конкретной функции модуля
   или не накладывает ли система конкретные ограничения.
  
  
   Утверждения не включают в производственный код и не проверяют утверждениями стандартные операции времени выполнения
   наподобие проверки входных параметров, поскольку код с утверждениями сломается, когда проверку ожиданий отключат в конфигурации PHP.
   Поэтому в производственной среде разворачивают код, который работает правильно даже при отключении проверки утверждений.
  
  
   Функция assert() проверяет, выполняется ли ожидание,
   установленное в параметре assertion.
   Функция assert() выполнит действие, которое сконфигурировали во втором параметре,
   если условие не выполнилось и поэтому вернуло значения false.
  
  
   Поведение конструкции assert() определяется следующими INI-настройками:
   
    Опции настройки конструкции assert
    
     
      
       | Имя | По умолчанию | Описание | Список изменений | 
     
     
      
       | zend.assertions | 1 | 
         
          1: генерирует и выполняет код. Значение указывают в режиме разработки
          0: генерирует, но не выполняет код при выполнении
          -1: не генерирует код. Значение указывают в производственном режиме |  | 
      
       | assert.active | true | Со значением falseфункция assert() не проверяет ожидание
        и возвращаетtrueбез проверки утверждения. | Директива устарела с PHP 8.3.0. | 
      
       | assert.callback | null | 
         Пользовательская функция, которая вызывается, если утверждение не прошло проверку.
         Callback-функцию определяют со следующей сигнатурой:
          | 
         До PHP 8.0.0 сигнатуру callback-функции определяли так:
         Директива устарела с PHP 8.3.0. | 
      
       | assert.exception | true | Со значением trueфункция выбрасывает исключение AssertionError,
        если ожидание не оправдалось. | Директива устарела с PHP 8.3.0. | 
      
       | assert.bail | false | Со значением trueвыполнение PHP-скрипта прервётся, если ожидание не оправдалось. | Директива устарела с PHP 8.3.0. | 
      
       | assert.warning | true | Со значением trueфункция выдаёт ошибку уровняE_WARNING,
        если ожидание не оправдалось.
        INI-настройка не работает, если включили директиву assert.exception. | Директива устарела с PHP 8.3.0. | 
     
    
   
  
  
 
  Список параметров
  
   
    
     - assertion
- 
      
       Выражение, значение возврата которого выполняется,
       а резлультат выполнения указывает, прошло ли утверждение проверку.
       Внимание
       
        До PHP 8.0.0 аргумент с типом string для параметра assertionинтерпретировался как PHP-код и выполнялся функцией eval().
        Эта строка передавалась в callback-функцию как третий аргумент.
        Это поведение УСТАРЕЛО в PHP 7.2.0, а в PHP 8.0.0 поведение УДАЛИЛИ.
 
 
- description
- 
      
       При передаче в параметр descriptionзначения
       с типом Throwable функция выбрасывает исключение,
       но только если утверждениеassertionне прошло проверку.
 Замечание: 
         
         Начиная с PHP 8.0.0 исключение выбрасывается до вызова
         callback-функции утверждения, если такой пользовательский обработчик определили.
         
 Замечание: 
         
         Начиная с PHP 8.0.0 объект (object) исключения выбрасывается независимо от конфигурации директивы
         assert.exception.
         
 Замечание: 
         
         Начиная с PHP 8.0.0 настройка assert.bail
         не работает, если в параметр передали объект исключения и утверждение не прошло проверку.
         
 
       При передаче в параметр descriptionзначения с типом string
       это сообщение появится в исключении или предупреждении.
       Необязательное описание, которое функция включит в сообщение,
       если утверждениеassertionне пройдет проверку.
 
       При пропуске параметра descriptionPHP на этапе компиляции сгенерирует описание ошибки, эквивалентное строке исходного кода
       самого утверждения assert().
 
 
 
  Возвращаемые значения
  
   Функция assert() возвращает значение true,
   если хотя бы одно из следующих утверждений истинно:
  
  
   - zend.assertions=0
- zend.assertions=-1
- assert.active=0
- assert.exception=1
- assert.bail=1
- В параметр descriptionпередали объект пользовательского исключения.
   Функция assert() проверяет утверждения
   и возвращает true при истинности аргумента assertion,
   но только если ни одно из отключающих проверки условий не выполняется,
   иначе функция возвращает false.
  
  
 
 
  Примеры
   
    Пример #1 Пример проверки утверждения функцией assert()
    
<?php
assert(1 > 2);
echo 'Привет!';
?>
     
    
     Приведённый пример выведет следующее,
     если утверждения включили в директиве zend.assertions=1:
    
Fatal error: Uncaught AssertionError: assert(1 > 2) in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'assert(1 > 2)')
#1 {main}
  thrown in example.php on line 2
 
    
     Приведённый пример выведет следующее,
     если утверждения отключили путём установки для директивы значений zend.assertions=0 или zend.assertions=-1:
    
 
   
    Пример #2 Пример пользовательского сообщения
    
<?php
assert(1 > 2, "Ожидается, что один больше двух");
echo 'Привет!';
?>
     
    
     Приведённый пример выведет следующее, если утверждения включили:
    
Fatal error: Uncaught AssertionError: Ожидается, что один больше двух in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'Expected one to...')
#1 {main}
  thrown in example.php on line 2
 
    
     Приведённый пример выведет следующее, если утверждения выключили:
    
 
   
    Пример #3 Пример пользовательского класса ошибок
    
<?php
class ArithmeticAssertionError extends AssertionError {}
assert(1 > 2, new ArithmeticAssertionError("Ожидается, что один больше двух"));
echo 'Hi!';
?>
     
    
     Приведённый пример выведет следующее, если утверждения включили:
    
Fatal error: Uncaught ArithmeticAssertionError: Ожидается, что один больше двух in example.php:4
Stack trace:
#0 {main}
  thrown in example.php on line 4
 
    
     Приведённый пример выведет следующее, если утверждения выключили: