<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sv">
	<id>https://wiki.linux.se/index.php?action=history&amp;feed=atom&amp;title=Exceptions</id>
	<title>Exceptions - Versionshistorik</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linux.se/index.php?action=history&amp;feed=atom&amp;title=Exceptions"/>
	<link rel="alternate" type="text/html" href="https://wiki.linux.se/index.php?title=Exceptions&amp;action=history"/>
	<updated>2026-05-27T01:07:27Z</updated>
	<subtitle>Versionshistorik för denna sida på wikin</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.linux.se/index.php?title=Exceptions&amp;diff=5130&amp;oldid=prev</id>
		<title>Admin: Skapade sidan med &#039;== Exceptions == === Innehållsförteckning === * Extending Exceptions  PHP har en undantagshanteringsmodell som liknar andra programmeringsspråk. Ett undantag kan utlösas och fångas i PHP. Kod kan omges med ett &#039;&#039;try&#039;&#039;-block för att underlätta hanteringen av potentiella undantag. Varje &#039;&#039;try&#039;&#039;-block måste ha minst ett motsvarande &#039;&#039;catch&#039;&#039;- eller &#039;&#039;finally&#039;&#039;-block.  Om ett undantag utlöses och dess nuvarande funktionsomfång saknar ett &#039;...&#039;</title>
		<link rel="alternate" type="text/html" href="https://wiki.linux.se/index.php?title=Exceptions&amp;diff=5130&amp;oldid=prev"/>
		<updated>2024-10-11T05:35:21Z</updated>

		<summary type="html">&lt;p&gt;Skapade sidan med &amp;#039;== Exceptions == === Innehållsförteckning === * &lt;a href=&quot;#Extending_Exceptions&quot;&gt;Extending Exceptions&lt;/a&gt;  PHP har en undantagshanteringsmodell som liknar andra programmeringsspråk. Ett undantag kan utlösas och fångas i PHP. Kod kan omges med ett &amp;#039;&amp;#039;try&amp;#039;&amp;#039;-block för att underlätta hanteringen av potentiella undantag. Varje &amp;#039;&amp;#039;try&amp;#039;&amp;#039;-block måste ha minst ett motsvarande &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;- eller &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-block.  Om ett undantag utlöses och dess nuvarande funktionsomfång saknar ett &amp;#039;...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny sida&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Exceptions ==&lt;br /&gt;
=== Innehållsförteckning ===&lt;br /&gt;
* [[#Extending Exceptions|Extending Exceptions]]&lt;br /&gt;
&lt;br /&gt;
PHP har en undantagshanteringsmodell som liknar andra programmeringsspråk. Ett undantag kan utlösas och fångas i PHP. Kod kan omges med ett &amp;#039;&amp;#039;try&amp;#039;&amp;#039;-block för att underlätta hanteringen av potentiella undantag. Varje &amp;#039;&amp;#039;try&amp;#039;&amp;#039;-block måste ha minst ett motsvarande &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;- eller &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-block.&lt;br /&gt;
&lt;br /&gt;
Om ett undantag utlöses och dess nuvarande funktionsomfång saknar ett &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block, kommer undantaget att &amp;quot;bubbla upp&amp;quot; i anropsstacken tills det hittar ett matchande &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block. Alla &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-block som stöts på under denna process kommer att köras. Om anropsstacken har tagits hela vägen tillbaka till det globala omfånget utan att ett matchande &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block hittas, kommer programmet att avslutas med ett dödligt fel om ingen global undantagshanterare har satts.&lt;br /&gt;
&lt;br /&gt;
Det utlösta objektet måste vara en instans av &amp;#039;&amp;#039;Throwable&amp;#039;&amp;#039;. Att försöka kasta ett objekt som inte är det resulterar i ett PHP-dödligt fel.&lt;br /&gt;
&lt;br /&gt;
Från och med PHP 8.0.0 är &amp;#039;&amp;#039;throw&amp;#039;&amp;#039; ett uttryck och kan användas i alla uttryckssammanhang. Tidigare var det ett uttalande och behövde vara på en egen rad.&lt;br /&gt;
&lt;br /&gt;
=== catch ===&lt;br /&gt;
Ett &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block definierar hur man ska reagera på ett utkastat undantag. Ett &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block definierar en eller flera typer av undantag eller fel det kan hantera, samt en variabel för att tilldela undantaget. (Variabeln var nödvändig före PHP 8.0.0.) Det första &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-blocket som ett utkastat undantag eller fel möter som matchar typen av det utkastade objektet kommer att hantera objektet.&lt;br /&gt;
&lt;br /&gt;
Flera &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block kan användas för att fånga olika undantagsklasser. Normal körning (när inget undantag utlöses inom &amp;#039;&amp;#039;try&amp;#039;&amp;#039;-blocket) kommer att fortsätta efter det sista &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-blocket i följd. Undantag kan utlösas (eller återkastas) inom ett &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block. Om inte, kommer körningen att fortsätta efter det &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block som utlöste det.&lt;br /&gt;
&lt;br /&gt;
När ett undantag utlöses kommer kod som följer uttalandet inte att köras, och PHP kommer att försöka hitta det första matchande &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-blocket. Om ett undantag inte fångas kommer ett PHP-dödligt fel att utfärdas med ett &amp;quot;Uncaught Exception ...&amp;quot; meddelande, såvida inte en hanterare har definierats med &amp;#039;&amp;#039;set_exception_handler()&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Från och med PHP 7.1.0 kan ett &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block specificera flera undantag med hjälp av rörtecknet (|). Detta är användbart när olika undantag från olika klasshierarkier hanteras på samma sätt.&lt;br /&gt;
&lt;br /&gt;
Från och med PHP 8.0.0 är variabelnamnet för ett fångat undantag valfritt. Om inte specificerat kommer &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-blocket fortfarande att köras men kommer inte ha tillgång till det utkastade objektet.&lt;br /&gt;
&lt;br /&gt;
=== finally ===&lt;br /&gt;
Ett &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-block kan också specificeras efter eller istället för &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block. Kod inom &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket kommer alltid att köras efter &amp;#039;&amp;#039;try&amp;#039;&amp;#039; och &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block, oavsett om ett undantag har utlösts, och innan normal körning återupptas.&lt;br /&gt;
&lt;br /&gt;
En anmärkningsvärd interaktion är mellan &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket och ett &amp;#039;&amp;#039;return&amp;#039;&amp;#039;-uttalande. Om ett &amp;#039;&amp;#039;return&amp;#039;&amp;#039;-uttalande möts inuti antingen &amp;#039;&amp;#039;try&amp;#039;&amp;#039; eller &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-blocken, kommer &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket fortfarande att köras. Dessutom utvärderas &amp;#039;&amp;#039;return&amp;#039;&amp;#039;-uttalandet när det möts, men resultatet returneras efter att &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket har körts. Om &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket också innehåller ett &amp;#039;&amp;#039;return&amp;#039;&amp;#039;-uttalande, returneras värdet från &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket.&lt;br /&gt;
&lt;br /&gt;
=== Global undantagshanterare ===&lt;br /&gt;
Om ett undantag får bubbla upp till det globala omfånget, kan det fångas av en global undantagshanterare om den är satt. Funktionen &amp;#039;&amp;#039;set_exception_handler()&amp;#039;&amp;#039; kan sätta en funktion som kommer att kallas istället för ett &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;-block om inget annat block anropas. Effekten är i huvudsak densamma som om hela programmet var omslutet av ett &amp;#039;&amp;#039;try-catch&amp;#039;&amp;#039;-block med den funktionen som &amp;#039;&amp;#039;catch&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Noteringar ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Notera:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Internt använder PHP-funktioner huvudsakligen felrapportering, endast moderna objektorienterade tillägg använder undantag. Fel kan dock enkelt översättas till undantag med &amp;#039;&amp;#039;ErrorException&amp;#039;&amp;#039;. Denna teknik fungerar dock endast med icke-dödliga fel.&lt;br /&gt;
&lt;br /&gt;
Exempel #1 Omvandla felrapportering till undantag&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function exceptions_error_handler($severity, $message, $filename, $lineno) {&lt;br /&gt;
    throw new ErrorException($message, 0, $severity, $filename, $lineno);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
set_error_handler(&amp;#039;exceptions_error_handler&amp;#039;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tips:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Standard PHP Library (SPL) tillhandahåller ett bra antal inbyggda undantag.&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Exempel #2 Kasta ett undantag&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function inverse($x) {&lt;br /&gt;
    if (!$x) {&lt;br /&gt;
        throw new Exception(&amp;#039;Division by zero.&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return 1/$x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
    echo inverse(5) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
    echo inverse(0) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
} catch (Exception $e) {&lt;br /&gt;
    echo &amp;#039;Caught exception: &amp;#039;,  $e-&amp;gt;getMessage(), &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Fortsätt körningen&lt;br /&gt;
echo &amp;quot;Hello World\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utmatning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.2&lt;br /&gt;
Caught exception: Division by zero.&lt;br /&gt;
Hello World&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exempel #3 Undantagshantering med ett &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-block&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function inverse($x) {&lt;br /&gt;
    if (!$x) {&lt;br /&gt;
        throw new Exception(&amp;#039;Division by zero.&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return 1/$x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
    echo inverse(5) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
} catch (Exception $e) {&lt;br /&gt;
    echo &amp;#039;Caught exception: &amp;#039;,  $e-&amp;gt;getMessage(), &amp;quot;\n&amp;quot;;&lt;br /&gt;
} finally {&lt;br /&gt;
    echo &amp;quot;First finally.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
    echo inverse(0) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
} catch (Exception $e) {&lt;br /&gt;
    echo &amp;#039;Caught exception: &amp;#039;,  $e-&amp;gt;getMessage(), &amp;quot;\n&amp;quot;;&lt;br /&gt;
} finally {&lt;br /&gt;
    echo &amp;quot;Second finally.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Fortsätt körningen&lt;br /&gt;
echo &amp;quot;Hello World\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utmatning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.2&lt;br /&gt;
First finally.&lt;br /&gt;
Caught exception: Division by zero.&lt;br /&gt;
Second finally.&lt;br /&gt;
Hello World&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exempel #4 Interaktion mellan &amp;#039;&amp;#039;finally&amp;#039;&amp;#039;-blocket och &amp;#039;&amp;#039;return&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function test() {&lt;br /&gt;
    try {&lt;br /&gt;
        throw new Exception(&amp;#039;foo&amp;#039;);&lt;br /&gt;
    } catch (Exception $e) {&lt;br /&gt;
        return &amp;#039;catch&amp;#039;;&lt;br /&gt;
    } finally {&lt;br /&gt;
        return &amp;#039;finally&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo test();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utmatning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
finally&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exempel #5 Nästlade undantag&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class MyException extends Exception { }&lt;br /&gt;
&lt;br /&gt;
class Test {&lt;br /&gt;
    public function testing() {&lt;br /&gt;
        try {&lt;br /&gt;
            try {&lt;br /&gt;
                throw new MyException(&amp;#039;foo!&amp;#039;);&lt;br /&gt;
            } catch (MyException $e) {&lt;br /&gt;
                // kasta om det&lt;br /&gt;
                throw $e;&lt;br /&gt;
            }&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            var_dump($e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$foo = new Test;&lt;br /&gt;
$foo-&amp;gt;testing();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utmatning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string(4) &amp;quot;foo!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exempel #6 Flerfaldig undantagshantering&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class MyException extends Exception { }&lt;br /&gt;
class MyOtherException extends Exception { }&lt;br /&gt;
&lt;br /&gt;
class Test {&lt;br /&gt;
    public function testing() {&lt;br /&gt;
        try {&lt;br /&gt;
            throw new MyException();&lt;br /&gt;
        } catch (MyException | MyOtherException $e) {&lt;br /&gt;
            var_dump(get_class($e));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$foo = new Test;&lt;br /&gt;
$foo-&amp;gt;testing();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utmatning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string(11) &amp;quot;MyException&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exempel #7 Utelämna den fångade variabeln (PHP 8.0.0 och senare)&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class SpecificException extends Exception {}&lt;br /&gt;
&lt;br /&gt;
function test() {&lt;br /&gt;
    throw new SpecificException(&amp;#039;Oopsie&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
    test();&lt;br /&gt;
} catch (SpecificException) {&lt;br /&gt;
    print &amp;quot;A SpecificException was thrown, but we don&amp;#039;t care about the details.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exempel #8 Kasta som ett uttryck (PHP 8.0.0 och senare)&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function test() {&lt;br /&gt;
    do_something_risky() or throw new Exception(&amp;#039;It did not work&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
    test();&lt;br /&gt;
} catch (Exception $e) {&lt;br /&gt;
    print $e-&amp;gt;getMessage();&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
= Sidslut =&lt;br /&gt;
&lt;br /&gt;
Orginalhemsidan på Engelska :https://www.php.net/manual/en/language.exceptions.php&lt;br /&gt;
&lt;br /&gt;
[[PHP]]&lt;br /&gt;
[[Funktioner]]&lt;br /&gt;
[[Funktionsreferens]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på &lt;br /&gt;
https://www.linux.se/kontaka-linux-se/&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Tack till [https://datorhjalp.se Datorhjälp Stockholm] som har  sponsrat [https://www.linux.se Linux.se] med webserver.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Php]]&lt;br /&gt;
[[Kategori:Error Handling Functions]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>