(PHP 4, PHP 5, PHP 7) assert — Confere se uma afirmação é PHP 5 PHP 7
assert() verifica a
Se o parâmetro
Asserts devem ser usadas apenas com a intenção de eliminar erros apenas. Você deve
usa-las para testar condições que devam ser
sempre
Asserts não devem ser usadas para operações em tempo de execução normais como para
conferir certo valor de entrada. Como uma dica de uso, o seu código deve funcionar
corretamente mesmo que os asserts não estejam
ativados.
O funcionamento de assert() pode ser configurado por
assert_options() ou pelas configurações descritas na pagina do
manual para estas funções.
A função assert_options() e/ou a diretiva de configuração
assert() callbacjs são particularmente
úteis quando estiver criando sistemas automáticos para testes porque permitem que você
capture facilmente o código passado para a afirmação em conjunto com informações sobre
onde a afirmação foi feita. Enquanto esta informação pode ser capturada por outros
métodos, usar afirmações torna muito mais
fácil e rápido!
A função de callback deve aceitar três argumentos. O primeiro
irá conter o arquivo onde houve a falha na afirmação. O
segundo argumento irá conter a linha onde a afirmação falhou e
o terceiro argumento irá conter a expressão que falhou (se houver
alguma — valores literais como 1 or "dois" não serão passados nesse
argumento). Usuários do PHP 5.4.8 e posteriores também devem providenciar um quarto
argumento opcional, que conterá o
assert() é um constructo de linguagem no PHP 7, permitindo
a definição de expectativas: asserts que tem efeitos em ambientes de desenvolvimento
e testes, mas que são removidos com custo zero
em produção.
Ainda que assert_options() possa ser utilizado para controlar
comportamentos descritos acima por razões de compatibilidade reversa, o PHP 7
somente deve usar duas novas diretivas para controlar
o comportamento de assert() e evitar chamar
assert_options().
A asserção. No PHP 5 isto precisa ser uma string a ser
executada ou um boolean para ser testado. No PHP 7 pode ser
também uma expressão que retorna valores, qual será executada e
o resultado será usado para indicar se a asserção confirmou-se ou falhou.
Uma descrição opctional que será incluída na mensagem de falha de
caso de
No PHP 7 o segundo parâmetro pode ser um objeto
Throwable em vez de uma string
string, e nesse caso o objeto será
lançado caso o assert falhe e
assert.exception
estiver habilitado.
Exemplo #1 Lida com um assert falho com um manipulador próprio
Exemplo #2 Utilizando um manipulador para imprimir uma descrição O exemplo acima irá imprimir: Exemplo #3 Expectativs sem uma exceção configurada
Com zend.assertions configurado para 0
o exemplo acima imprimirá:
Com zend.assertions configurado para 1
e assert.exception para 0
O exemplo acima imprimirá:
Com zend.assertions configurado para 1
e assert.exception para 1
o exemplo acima imprimirá:
Exemplo #4 Expectativs com uma exceção configurada
Com zend.assertions configurado para 0
o exemplo acima imprirá:
Com zend.assertions configurado para 0
e assert.exception para 0
o exemplo acima imprimirá:
Com zend.assertions configurado para 1
e assert.exception para 1
o exemplo acima imprimirá:
assert
FALSE
Descrição
assertion
informada e toma a ação apropriada se
seu resultado é FALSE
.
Asserts tradicionais (PHP 5 and 7)
assertion
é dado como uma string ela
será avaliada como código PHP pela função assert().
As vantagens de uma assertion
string são menor sobrecarga
na conferência se a afirmação é verdadeira e mensagens contendo
assertion
quando a afirmação é falsa. Isto indica que se
você passar uma condição booleana (verdadeiro ou falso) como
assertion
esta condição não será mostrada como parâmetro
da função de assert, o qual você deve ter definido com a função
assert_options(), a condição é convertida para uma string antes
que a função gerenciadora seja chamada e o booleano FALSE
é convertido para uma string vazia.
TRUE
e que indiquem algum erro de programação
ou para verificar a existência/disponibilidade de funções,
extensões ou ainda de limites e recursos do sistema.
ASSERT_CALLBACK
permitem configurar uma função para ser chamada no caso de
falha da afirmação.
description
informado no assert()
it was set.
Expectations (PHP 7 only)
Diretiva
Padrão
Valores possíveis
zend.assertions
1
assert.exception
0
exception
ou lançando um objeto AssertionError se
exception
não tiver sido informado
Parâmetros
assertion
description
assertion
falhar.
exception
Valor Retornado
FALSE
se o assert é falso, TRUE
nos demais casos.
Changelog
Versão
Descrição
7.0.0
assert() agora é um constructo de linguagem e não mais
uma função. assertion() agora pode ser uma expressão.
O segundo parâmtro pode ser interpretado como um
exception
(se do tipo
Throwable) ou como uma string, funcionando como o campo
description
do PHP 5.4.8 e posteriores.
5.4.8
O parâmetro
description
foi adicionado. O parâmetro
description
é informado na função callback
no modo ASSERT_CALLBACK
como o quarto
argumento.
Exemplos
Asserts tradicionais (PHP 5 e 7)
<?php
// Ativa asserts configura silêncio
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// Cria a função de manipulação
function my_assert_handler($file, $line, $code)
{
echo "<hr>Assertion Failed:
File '$file'<br />
Line '$line'<br />
Code '$code'<br /><hr />";
}
// Configura o callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
// Realiza um assert que deve falhar
assert('mysql_query("")');
?>
<?php
// Ativa asserts configura silêncio
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// Cria a função de manipulação
function my_assert_handler($file, $line, $code, $desc = null)
{
echo "Assertion failed at $file:$line: $code";
if ($desc) {
echo ": $desc";
}
echo "\n";
}
// Configura o 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');
?>
Assertion failed at test.php:21: 2 < 1
Assertion failed at test.php:22: 2 < 1: Two is less than one
Expectativas (PHP 7 somente)
<?php
assert(true == false);
echo 'Hi!';
?>
Hi!
Warning: assert(): assert(true == false) failed in - on line 2
Hi!
Fatal error: Uncaught AssertionError: assert(true == false) in -:2
Stack trace:
#0 -(2): assert(false, 'assert(true == ...')
#1 {main}
thrown in - on line 2
<?php
class CustomError extends AssertionError {}
assert(true == false, new CustomError('True is not false!'));
echo 'Hi!';
?>
Hi!
Warning: assert(): CustomError: True is not false! in -:4
Stack trace:
#0 {main} failed in - on line 4
Hi!
Fatal error: Uncaught CustomError: True is not false! in -:4
Stack trace:
#0 {main}
thrown in - on line 4
Menu
Tutoriais de Tecnologia Web
Áreas
Blogs
Sites Sociais