Solución:
Assert()
es una función inteligente que funciona en la misma línea que nuestras declaraciones de impresión, pero solo tienen algún efecto si una determinada condición no coincide. Esencialmente, assert()
se utiliza para decir “Esta afirmación debe ser cierta; si no lo es, dímelo”. Considere el siguiente ejemplo:
<?php
print "Stage 1n";
assert(1 == 1);
print "Stage 2n";
assert(1 == 2);
print "Stage 3n";
?>
Aquí tenemos dos assert()
s, con la primera llamada afirmando que uno debe ser igual a uno, y la segunda llamada afirmando que uno debe ser igual a dos. Como es imposible redefinir constantes como 1 y 2, la primera assert()
siempre se evaluará como verdadero y el segundo siempre se evaluará como falso. Aquí está el resultado del script:
Etapa 1 Etapa 2 Advertencia: aseverar ()
[http://www.php.net/function.assert]: La afirmación falló en /home/paul/sandbox/php/assert.php en la línea 5
Etapa 3
Tenga en cuenta que la primera assert()
no se ve en la salida en absoluto porque se evaluó para true
, mientras que el segundo assert()
evaluado a false
, entonces obtenemos un warning
acerca de un assertion failure
. También tenga en cuenta que vemos "Stage 3"
después de la afirmación failure warning
, porque el script continúa ejecutándose después de la falla. Siempre que las afirmaciones se evalúen como verdaderas, no tienen ningún efecto en la ejecución del script, lo que significa que puede insertarlas con fines de depuración y no tener que preocuparse por eliminarlas una vez que haya terminado de depurar.
Si le preocupa que sus afirmaciones ralenticen la ejecución, lo cual, aunque el impacto de velocidad será mínimo, sigue siendo una preocupación válida, puede deshabilitar la ejecución de assert()
usando el assert_options()
función o configurando assert.active
a Off en su archivo php.ini. Si quieres usar assert_options()
, se necesitan dos parámetros: la opción para establecer y el valor al que desea establecerlo, y hay una variedad de formas en que puede hacer que assert () sea más poderoso.
Tenga en cuenta que todas estas opciones se pueden configurar en su php.ini
archivo para que siempre estén en efecto; las opciones clave para cambiar son assert.active, assert.warning, assert.bail, assert.quiet_eval, and assert_callback
.
ASSERT_CALLBACK
es una opción muy útil, ya que le permite escribir un controlador de errores para cuando su código falla en una afirmación. Se necesita el nombre de cadena de una función para ejecutarse cuando fallan las aserciones, y la función que defina debe tomar tres parámetros: uno para contener el archivo donde ocurrió la aserción, otro para contener la línea y otro para contener la expresión. Usar los tres juntos en su función de devolución de llamada le permite generar mensajes de error significativos que puede depurar fácilmente. Considere este fragmento de código:
<?php
function assert_failed($file, $line, $expr) {
print "Assertion failed in $file on line $line: $exprn";
}
assert_options (ASSERT_CALLBACK, 'assert_failed');
assert_options (ASSERT_WARNING, 0);
$foo = 10;
$bar = 11;
assert('$foo > $bar');
?>
Ref: http://www.hackingwithphp.com/19/8/3/making-assertions
Ejemplo de documentación oficial
assert_options
– Establecer / obtener las diversas banderas de aserción
Ejemplo # 1 ejemplo de assert_options ()
<?php
// This is our function to handle
// assert failures
function assert_failure()
{
echo 'Assert failed';
}
// This is our test function
function test_assert($parameter)
{
assert(is_bool($parameter));
}
// Set our assert options
assert_options(ASSERT_ACTIVE, true);
assert_options(ASSERT_BAIL, true);
assert_options(ASSERT_WARNING, false);
assert_options(ASSERT_CALLBACK, 'assert_failure');
// Make an assert that would fail
test_assert(1);
// This is never reached due to ASSERT_BAIL
// being true
echo 'Never reached';
?>
Según la documentación de PHP assert()
- Si la aserción se da como una cadena, será evaluada como código PHP por
assert()
. - Si pasa una condición booleana como aserción, esta condición no aparecerá como parámetro para la función de aserción que puede haber definido con
assert_options()
La condición se convierte en una cadena antes de llamar a esa función de controlador, y el booleano FALSE se convierte como una cadena vacía. -
Assertions
debe usarse como undebugging
característica única. Puede usarlos para verificaciones de cordura que prueban condiciones que siempre deberían ser VERDADERAS y que indican algunos errores de programación en caso contrario o para verificar la presencia de ciertas características como funciones de extensión o ciertos límites y características del sistema. -
Assertions
no debe usarse para operaciones normales en tiempo de ejecución comoinput parameter
cheques. Como regla general, su código siempre debería poder funcionar correctamente si la verificación de afirmaciones no está activada. - El comportamiento de
assert()
puede ser configurado porassert_options()
o por.ini-settings
descrito en esa página del manual de funciones.assert_options()
función y / oASSERT_CALLBACK
La directiva de configuración permite que se establezca una función de devolución de llamada para manejar afirmaciones fallidas. 6.assert()
las devoluciones de llamada son particularmente útiles para crear conjuntos de pruebas automatizadas porque le permiten capturar fácilmente el código pasado a la aserción, junto con información sobre dónde se realizó la aserción. Si bien esta información se puede capturar a través de otros métodos, el uso de aserciones lo hace mucho más rápido y fácil.
los assert()
La función es una buena manera de asegurar que ciertas condiciones sean verdaderas a lo largo de la vida de su código. Para citar este artículo de Paul Hudson:
Esencialmente, assert () se usa para decir “Esta afirmación debe ser cierta; si no lo es, dímelo”.
Para habilitar el manejo de aserciones, use assert_options(ASSERT_ACTIVE)
, y también usa assert_options()
con otros argumentos para controlar lo que sucede cuando fallan las afirmaciones (por ejemplo, finalizar la ejecución del script PHP cuando falla una afirmación, llamar a una función de controlador, que podría usarse para enviar correos electrónicos, registrar datos en archivos y / o tablas de bases de datos, etc.). Consulte la sección de parámetros para ver la lista de todas las opciones y sus resultados.
Pruebe algunas de las opciones de este ejemplo de patio de recreo.
Lea ese artículo para obtener más información sobre ambas funciones.