Felkontroll

Från Wiki.linux.se
Version från den 17 augusti 2024 kl. 12.09 av Admin (diskussion | bidrag) (Skapade sidan med '== Felkontrolloperatorer == PHP stöder en felkontrolloperator: at-tecknet (@). När det läggs till framför ett uttryck i PHP kommer alla diagnostiska fel som kan genereras av det uttrycket att undertryckas. Om en anpassad felhanterarfunktion är inställd med `set_error_handler()`, kommer den fortfarande att anropas även om diagnostiken har undertryckts. '''Varning''' Före PHP 8.0.0 returnerade `error_reporting()` alltid 0 om felet undertrycktes av @-operatorn, n...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Felkontrolloperatorer

PHP stöder en felkontrolloperator: at-tecknet (@). När det läggs till framför ett uttryck i PHP kommer alla diagnostiska fel som kan genereras av det uttrycket att undertryckas.

Om en anpassad felhanterarfunktion är inställd med `set_error_handler()`, kommer den fortfarande att anropas även om diagnostiken har undertryckts.

Varning Före PHP 8.0.0 returnerade `error_reporting()` alltid 0 om felet undertrycktes av @-operatorn, när det anropades inuti den anpassade felhanteraren. Från och med PHP 8.0.0 returnerar det värdet av detta (bitvisa) uttryck: `E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE`.

Eventuella felmeddelanden som genereras av uttrycket är tillgängliga i "message"-elementet i arrayen som returneras av `error_get_last()`. Resultatet av den funktionen kommer att ändras vid varje fel, så det måste kontrolleras tidigt.

<syntaxhighlight lang="php"> <?php /* Avsiktligt filfel */ $my_file = @file('non_existent_file') eller

   dö("Kunde inte öppna filen: felet var '" . error_get_last()['message'] . "'");

// detta fungerar för vilket uttryck som helst, inte bara funktioner: $value = @$cache[$key]; // kommer inte att generera en notis om indexet $key inte existerar. ?> </syntaxhighlight>

Notering: @-operatorn fungerar endast på uttryck. En enkel tumregel är: om man kan ta värdet av något, då kan man lägga till @-operatorn framför det. Till exempel kan det läggas till framför variabler, funktionsanrop, vissa språkkonstruktanrop (t.ex. `include`) och så vidare. Det kan inte läggas till framför funktions- eller klassdefinitioner, eller konditionella strukturer som `if` och `foreach`, och så vidare.

Varning Före PHP 8.0.0 var det möjligt för @-operatorn att inaktivera kritiska fel som skulle avsluta skriptkörningen. Till exempel, att lägga till @ framför ett anrop till en funktion som inte existerade, genom att den var otillgänglig eller felskriven, skulle få skriptet att avslutas utan någon indikation om varför.

Se även

  • `error_reporting()`
  • Felhantering och loggningsfunktioner