(No hay información de versión disponible, podría estar únicamente en SVN)
Aserción — Verifica si la aserción es FALSE
PHP 5 y 7
PHP 7
La función assert() revisará el parámetro
assertion
proporcionado y tomará la acción apropiada si
su resultado es FALSE
.
Si el parámetro assertion
es proporcionado como un string
será evaluado como código PHP por la función assert().
Las ventajas de un parámetro assertion
como string es que son
menos sobrecargados cuando la comprobación de la aserción está deshabilitada y los
mensajes que contienen la expresión assertion
, la
expresión falla. Esto significa que si pasa una condición de tipo boolean como
assertion
esta condición no se mostrará como
parámetro a la función de aserción la cual tiene que haber definido con la función
assert_options(), la condición es convertida
a un string antes de llamar ese manejador de función, y el tipo boolean FALSE
es convertido como el string vacío.
Las aserciones deberían ser utilizadas solamente como una característica de depuración. Debería
utilizarlas para las revisiones de buen funcionamiento las cuales comprueban las condiciones que siempre
deberían ser TRUE
y que indican algunos errores de programación o si no,
para revisar la presencia de algunas características, como funciones de
extensión o ciertos límites del sistema y características.
Las aserciones no deberían utilizarse para operaciones normales en tiempo de ejecución como revisiones de parámetros de entrada. Como regla general su código siempre debería ser capaz de funcionar correctamente aún si la verificación de aserción no está activada.
El comportamiento de la función assert() podría ser configurado por la función assert_options() o por .ini-settings el cual está descrito en la página del manual de esas funciones.
La función assert_options() y/o la directiva de configuración
ASSERT_CALLBACK
permite que una función de llamada de retorno sea establecida
para manejar aseciones fallidas.
Las llamadas de retorno assert() son particularmente útiles para construir conjuntos de pruebas automatizadas porque le permiten capturar fácilmente el código pasado a la aserción, junto con la información en donde fue hecha la aserción. Mientras que la información puede ser capturada a través de otros métodos, utilizar asernciones lo hace mucho más rápido y más fácil!
La función de llamada de retorno debería aceptar tres argumentos. El primero
contendrá el fichero en que falló la aserción. El segundo
contendrá la línea en la que falló la aserción y
el tercer argumento contendrá la expresión que falló (si la
hubiera — valores literales tales como 1 o "dos" no se pasarán a través
de este argumento). Los usuarios de PHP 5.4.8 y versiones posteriores también podrían proveer un cuarto
argumento opcional, que contendrá el parámetro
description
proporcionado a la función assert(), si
fue establecido.
La función assert() es una construcción de lenguaje en PHP 7, que permite la definición de expectativas: las aserciones que surten efecto en ambientes de desarrollo y pruebas, pero que se optimizan para que tengan costo cero en la producción.
************* desde aqui *************** Mientras que assert_options() puede ser utilizada para controlar el comportamiento como se describe anteriormente por la compatibilidad con versiones anteriores, el código PHP 7 sólo debería usar las dos directivas nuevas de configuración para controlar el comportamiento de assert() y no llamar a assert_options().
Directive | Default value | Possible values |
---|---|---|
zend.assertions | 1 |
|
assert.exception | 0 |
|
assertion
The assertion. In PHP 5, this must be either a string to be evaluated or a boolean to be tested. In PHP 7, this may also be any expression that returns a value, which will be executed and the result used to indicate whether the assertion succeeded or failed.
description
An optional description that will be included in the failure message if
the assertion
fails.
exception
In PHP 7, the second parameter can be a Throwable object instead of a descriptive string, in which case this is the object that will be thrown if the assertion fails and the assert.exception configuration directive is enabled.
FALSE
if the assertion is false, TRUE
otherwise.
Versión | Descripción |
---|---|
7.0.0 |
assert() is now a language construct and not a
function. assertion() can now be an expression.
The second parameter is now interpreted either as an
exception (if a
Throwable object is given), or as the
description supported from PHP 5.4.8 onwards.
|
5.4.8 |
The description parameter was added. The
description is also now provided to a callback
function in ASSERT_CALLBACK mode as the fourth
argument.
|
Ejemplo #1 Handle a failed assertion with a custom handler
<?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// Create a handler function
function my_assert_handler($file, $line, $code)
{
echo "<hr>Assertion Failed:
File '$file'<br />
Line '$line'<br />
Code '$code'<br /><hr />";
}
// Set up the callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
// Make an assertion that should fail
assert('mysql_query("")');
?>
Ejemplo #2 Using a custom handler to print a description
<?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// Create a handler function
function my_assert_handler($file, $line, $code, $desc = null)
{
echo "Assertion failed at $file:$line: $code";
if ($desc) {
echo ": $desc";
}
echo "\n";
}
// Set up the callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
// Make an assertion that should fail
assert('2 < 1');
assert('2 < 1', 'Two is less than one');
?>
El resultado del ejemplo sería:
Assertion failed at test.php:21: 2 < 1 Assertion failed at test.php:22: 2 < 1: Two is less than one
Ejemplo #3 Expectations without a custom exception
<?php
assert(true == false);
echo 'Hi!';
?>
With zend.assertions set to 0, the above example will output:
Hi!
With zend.assertions set to 1 and assert.exception set to 0, the above example will output:
Warning: assert(): assert(true == false) failed in - on line 2 Hi!
With zend.assertions set to 1 and assert.exception set to 1, the above example will output:
Fatal error: Uncaught AssertionError: assert(true == false) in -:2 Stack trace: #0 -(2): assert(false, 'assert(true == ...') #1 {main} thrown in - on line 2
Ejemplo #4 Expectations with a custom exception
<?php
class CustomError extends AssertionError {}
assert(true == false, new CustomError('True is not false!'));
echo 'Hi!';
?>
With zend.assertions set to 0, the above example will output:
Hi!
With zend.assertions set to 1 and assert.exception set to 0, the above example will output:
Warning: assert(): CustomError: True is not false! in -:4 Stack trace: #0 {main} failed in - on line 4 Hi!
With zend.assertions set to 1 and assert.exception set to 1, the above example will output:
Fatal error: Uncaught CustomError: True is not false! in -:4 Stack trace: #0 {main} thrown in - on line 4