Felkontroll: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
 
(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
     ("Kunde inte öppna filen: felet var '" . error_get_last()['message'] . "'");
     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.


PHP
Språkreferens

Se även