assert

Från Wiki.linux.se
Version från den 13 oktober 2024 kl. 05.15 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök

assert

assert — Kontrollerar ett påstående

Beskrivning

assert(mixed $assertion, Throwable|string|null $description = null): bool assert() tillåter definition av förväntningar: påståenden som är aktiva i utvecklings- och testmiljöer, men optimeras bort för att ha noll kostnad i produktion.

Påståenden bör endast användas som ett felsökningsverktyg. Ett användningsfall är att fungera som sanity-checks för förutsättningar som alltid borde vara sanna och som, om de inte upprätthålls, indikerar programmeringsfel. Ett annat användningsfall är att säkerställa närvaron av vissa funktioner som tilläggsfunktioner eller vissa systembegränsningar och funktioner.

Eftersom påståenden kan konfigureras för att elimineras, bör de inte användas för normala runtime-operationer som kontroll av inmatningsparametrar. Som en tumregel bör koden bete sig som förväntat även om påståendekontrollen är inaktiverad.

assert() kommer att kontrollera att förväntningen som ges i påståendet håller. Om inte, och därmed resultatet är falskt, kommer den att vidta lämpliga åtgärder beroende på hur assert() har konfigurerats.

Beteendet hos assert() styrs av följande INI-inställningar:

Konfigurationsalternativ för Assert

Namn Standard Beskrivning Ändringslogg
zend.assertions 1
  • 1: Generera och utför kod (utvecklingsläge)
  • 0: Generera kod men hoppa över den vid runtime
  • -1: Generera inte kod (produktionsläge) ||
assert.active true Om falskt kontrollerar assert() inte förväntningen och returnerar true, oberoende. Föråldrat sedan PHP 8.3.0.
assert.callback null En användardefinierad funktion som anropas när ett påstående misslyckas. Dess signatur bör vara:
assert_callback(
    string $file,
    int $line,
    null $assertion,
    string $description = ?
): void

Före PHP 8.0.0 bör signaturen vara:

assert_callback(
    string $file,
    int $line,
    string $assertion,
    string $description = ?
): void
Föråldrat sedan PHP 8.3.0.
assert.exception true Om true, kastar den ett AssertionError om förväntningen inte uppfylls. Föråldrat sedan PHP 8.3.0.
assert.bail false Om true, avbryter den körningen av PHP-skriptet om förväntningen inte uppfylls. Föråldrat sedan PHP 8.3.0.
assert.warning true Om true, genererar den en E_WARNING om förväntningen inte uppfylls. Denna INI-inställning är ineffektiv om assert.exception är aktiverad. Föråldrat sedan PHP 8.3.0.

Parametrar

assertion
Detta är ett vilket uttryck som helst som returnerar ett värde, vilket kommer att utföras och resultatet används för att indikera om påståendet lyckades eller misslyckades.

Varning: Före PHP 8.0.0, om assertion var en sträng tolkades den som PHP-kod och utfördes via eval(). Denna sträng skulle skickas till callback som det tredje argumentet. Detta beteende var föråldrat i PHP 7.2.0 och togs bort i PHP 8.0.0.

description
Om description är en instans av Throwable, kommer den att kastas endast om påståendet utförs och misslyckas.

Notering: Från och med PHP 8.0.0 görs detta innan den potentiellt definierade assertions-callbacken anropas.

Notering: Från och med PHP 8.0.0 kommer objektet att kastas oavsett konfigurationen av assert.exception.

Notering: Från och med PHP 8.0.0 har assert.bail-inställningen ingen effekt i detta fall.

Om description är en sträng kommer detta meddelande att användas om ett undantag eller en varning emitteras. Ett valfritt beskrivande meddelande som kommer att inkluderas i felmeddelandet om påståendet misslyckas.

Om description utelämnas skapas en standardbeskrivning som är lika med källkoden för anropet till assert() vid kompileringstid.

Returvärden

assert() returnerar alltid true om minst en av följande är sann:

  • zend.assertions=0
  • zend.assertions=-1
  • assert.exception=1
  • assert.bail=1
  • Ett anpassat undantagsobjekt skickas till description.

Om ingen av dessa villkor är sanna kommer assert() att returnera true om assertion är sanningsenlig och false annars.

Changelog

Version Beskrivning
8.3.0 Alla assert.* INI-inställningar har föråldrats.
8.0.0 assert() kommer inte längre att utvärdera strängargument, istället behandlas de som vilket annat argument som helst. Använd assert($a == $b) istället för assert('$a == $b'). assert.quiet_eval php.ini-direktivet och ASSERT_QUIET_EVAL konstanten har också tagits bort, eftersom de inte längre har någon effekt.
8.0.0 Om description är en instans av Throwable, kastas objektet om påståendet misslyckas, oavsett värdet av assert.exception.
8.0.0 Om description är en instans av Throwable, anropas ingen användarcallback även om den är satt.
8.0.0 Att deklarera en funktion kallad assert() inom ett namespace är inte längre tillåtet och genererar E_COMPILE_ERROR.
7.3.0 Att deklarera en funktion kallad assert() inom ett namespace blev föråldrat. Sådan deklaration emitterar nu en E_DEPRECATED.
7.2.0 Användning av en sträng som påstående blev föråldrat. Den genererar nu en E_DEPRECATED-notis när både assert.active och zend.assertions är satta till 1.

Exempel

Exempel #1 assert() exempel

<?php
assert(1 > 2);
echo 'Hi!';
?>

Om påståenden är aktiverade (zend.assertions=1) kommer ovanstående exempel att ge:

Fatal error: Uncaught AssertionError: assert(1 > 2) in example.php:2 Stack trace:

  1. 0 example.php(2): assert(false, 'assert(1 > 2)')
  2. 1 {main}
 thrown in example.php on line 2

Om påståenden är inaktiverade (zend.assertions=0 eller zend.assertions=-1) kommer ovanstående exempel att ge:

Hi!

Exempel #2 Använda ett anpassat meddelande

<?php
assert(1 > 2, "Förväntade att ett ska vara större än två");
echo 'Hi!';
?>

Om påståenden är aktiverade kommer ovanstående exempel att ge:

Fatal error: Uncaught AssertionError: Förväntade att ett ska vara större än två in example.php:2 Stack trace:

  1. 0 example.php(2): assert(false, 'Förväntade att ett...')
  2. 1 {main}
 thrown in example.php on line 2

Om påståenden är inaktiverade kommer ovanstående exempel att ge:

Hi!

Exempel #3 Använda en anpassad undantagsklass

<?php
class ArithmeticAssertionError extends AssertionError {}
assert(1 > 2, new ArithmeticAssertionError("Förväntade att ett ska vara större än två"));
echo 'Hi!';
?>

Om påståenden är aktiverade kommer ovanstående exempel att ge:

Fatal error: Uncaught ArithmeticAssertionError: Förväntade att ett ska vara större än två in example.php:4 Stack trace:

  1. 0 {main}
 thrown in example.php on line 4

Om påståenden är inaktiverade kommer ovanstående exempel att ge:

Hi!

Se även