Felkontroll: Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) |
||
(7 mellanliggande sidversioner av samma användare visas inte) | |||
Rad 6: | Rad 6: | ||
'''Varning''' | '''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`. | 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. | 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. | ||
<code> | |||
<?php | <?php | ||
Rad 16: | Rad 18: | ||
$my_file = @file('non_existent_file') eller | $my_file = @file('non_existent_file') eller | ||
die("Kunde inte öppna filen: felet var '" . error_get_last()['message'] . "'"); | |||
// detta fungerar för vilket uttryck som helst, inte bara funktioner: | // detta fungerar för vilket uttryck som helst, inte bara funktioner: | ||
$value = @$cache[$key]; | <BR>$value = @$cache[$key]; | ||
// kommer inte att generera en notis om indexet $key inte existerar. | <BR>// kommer inte att generera en notis om indexet $key inte existerar. | ||
?> | ?> | ||
</code> | |||
'''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. | '''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. | ||
Rad 29: | Rad 31: | ||
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. | 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. | ||
<BR> | |||
[[PHP]]<BR> | |||
[[Språkreferens]]<BR> | |||
[[Kategori:Php]] | |||
== Se även == | == Se även == | ||
* [[error_reporting()]] | * [[error_reporting()]] | ||
* [[Felhantering och loggningsfunktioner]] | * [[Felhantering och loggningsfunktioner]] |
Nuvarande version från 18 augusti 2024 kl. 05.48
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.
<?php
/* Avsiktligt filfel */
$my_file = @file('non_existent_file') eller
die("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.
?>
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.