Felkontroll: Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) |
||
Rad 12: | Rad 12: | ||
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 25: | Rad 25: | ||
?> | ?> | ||
</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. | ||
Versionen från 17 augusti 2024 kl. 12.11
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
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.
?>
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.