(PHP 4, PHP 5, PHP 7, PHP 8)
assert — Verifica una aserción
assert() permite definir expectativas: aserciones que tienen efecto en los entornos de desarrollo y prueba, pero que están optimizadas para no tener costo en producción.
Las afirmaciones pueden ser utilizadas para ayudar en la depuración.
Un caso de uso para las aserciones es servir de verificaciones de coherencia para precondiciones que siempre deberían ser true
, y si no se cumplen, indican errores de programación.
Otro caso de uso es garantizar la presencia de ciertas funcionalidades como funciones de extensión o ciertos límites y funcionalidades del sistema.
Como las aserciones pueden ser configuradas para ser eliminadas, no deben ser utilizadas para operaciones normales en curso de ejecución, tales como verificaciones de los parámetros de entrada. En regla general, el código debe comportarse como se espera incluso si la verificación de aserciones está desactivada.
assert() verificará que la expectativa dada en
assertion
es satisfecha.
Si no es el caso y por lo tanto el resultado es false
, tomará la acción apropiada
en función de la configuración de assert().
El comportamiento de assert() está dictado por los siguientes parámetros INI:
Nombre | Por defecto | Descripción | Historial de cambios |
---|---|---|---|
zend.assertions | 1 |
|
|
assert.active | true |
Si false , assert() no verifica la expectativa
y siempre devuelve true , sin condición.
|
Obsolète a partir de PHP 8.3.0. |
assert.callback | null |
Una función definida por el usuario a llamar cuando una aserción falla. Su firma debería ser: |
Anterior a PHP 8.0.0, la firma de la función de retrollamada debería ser: Obsolète a partir de PHP 8.3.0. |
assert.exception | true |
Si true , lanzará una AssertionError si la expectativa no es cumplida.
|
Obsolète a partir de PHP 8.3.0. |
assert.bail | false |
Si true , interrumpirá la ejecución del script PHP si la expectativa no es cumplida.
|
Obsolète a partir de PHP 8.3.0. |
assert.warning | true |
Si true , emitirá un E_WARNING si la expectativa no es cumplida.
Este parámetro INI es ineficaz si
assert.exception
está activado.
|
Obsolète a partir de PHP 8.3.0. |
assertion
Esto es una expresión cualquiera que devuelve un valor, que será ejecutada y cuyo resultado será utilizado para indicar si la aserción ha tenido éxito o ha fallado.
description
Si description
es una instancia de
Throwable, será lanzada únicamente si
assertion
es ejecutada y falla.
Nota:
A partir de PHP 8.0.0, esto se hace antes de llamar a la función de retrollamada de aserción eventualmente definida
Nota:
A partir de PHP 8.0.0, el objeto object será lanzado independientemente de la configuración de assert.exception.
Nota:
A partir de PHP 8.0.0, el parámetro assert.bail no tiene ningún efecto en este caso.
Si description
es una string, este mensaje
será utilizado si una excepción o un aviso es emitido.
Una descripción opcional, que será incluida en el mensaje de fallo si
la assertion
falla.
Si description
es omitido.
Una descripción por defecto equivalente al código fuente de la llamada de
assert() es creada en el momento de la compilación.
assert() devolverá siempre true
si al menos una de las siguientes condiciones es verdadera:
zend.assertions=0
zend.assertions=-1
assert.exception=1
assert.bail=1
description
.
Si ninguna de las condiciones es verdadera, assert() devolverá true
si
assertion
es verdadera, y false
en caso contrario.
Versión | Descripción |
---|---|
8.3.0 |
Todas las configuraciones INI assert. han sido deprecadas.
|
8.0.0 |
La función assert() ya no evaluará los argumentos de tipo string,
en su lugar, serán tratados como cualquier otro argumento.
assert($a == $b) debería ser utilizado en lugar de assert('$a == $b') .
La directiva assert.quiet_eval php.ini y la constante ASSERT_QUIET_EVAL
también han sido eliminadas, ya que no tendrían ningún efecto.
|
8.0.0 |
Si description es una instancia de
Throwable, el objeto es lanzado si la aserción falla, independientemente del valor de
assert.exception.
|
8.0.0 |
Si description es una instancia de
Throwable, ninguna función de retrollamada de usuario
es llamada incluso si está definida.
|
8.0.0 |
Declarar una función que se llame assert() dentro de un espacio de nombres ya no está permitido, y genera
una E_COMPILE_ERROR .
|
7.3.0 |
Declarar una función que se llame assert() dentro de un espacio de nombres se volvió obsoleto. Dichas
declaraciones ahora generan una E_DEPRECATED .
|
7.2.0 |
El uso de una string como assertion se volvió obsoleto. Esto ahora emite una notificación
E_DEPRECATED cuando
assert.active y
zend.assertions están ambos definidos a 1 .
|
Ejemplo #1 Ejemplo de assert()
<?php
assert(1 > 2);
echo 'Hi!';
?>
Si las aserciones están activadas (zend.assertions=1
)
el ejemplo anterior mostraría:
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
Si las aserciones están desactivadas (zend.assertions=0
o zend.assertions=-1
)
el ejemplo anterior mostraría:
Hi!
Ejemplo #2 Uso de un mensaje personalizado
<?php
assert(1 > 2, "Expected one to be greater than two");
echo 'Hi!';
?>
Si las aserciones están activadas, el ejemplo anterior mostraría: el ejemplo anterior mostraría:
Fatal error: Uncaught AssertionError: Expected one to be greater than two in example.php:2 Stack trace: #0 example.php(2): assert(false, 'Expected one to...') #1 {main} thrown in example.php on line 2
Si las aserciones están desactivadas, el ejemplo anterior mostraría: el ejemplo anterior mostraría:
Hi!
Ejemplo #3 Uso de una clase de excepción personalizada
<?php
class ArithmeticAssertionError extends AssertionError {}
assert(1 > 2, new ArithmeticAssertionError("Expected one to be greater than two"));
echo 'Hi!';
Si las aserciones están activadas, el ejemplo anterior mostraría: el ejemplo anterior mostraría:
Fatal error: Uncaught ArithmeticAssertionError: Expected one to be greater than two in example.php:4 Stack trace: #0 {main} thrown in example.php on line 4
Si las aserciones están desactivadas, el ejemplo anterior mostraría:
Hi!