Foutafhandeling in PHP (Error Handling)

  1. Inleiding
  2. Weergave en interpretatie van PHP fouten
  3. Basis foutafhandeling met die()
  4. Een flexibelere manier: trigger_error()
  5. Foutafhandeling en controle van variabelen
  6. Een eigen foutafhandeling functie met set_error_handler()
  7. Exceptions in PHP 5
  8. Gedetailleerde foutinformatie verkrijgen met exceptions
  9. Uitgebreide foutafhandeling met gebruik van foutcodes
  10. Uitbreiden van de standaard Exception klasse
  11. Slotwoord en referenties
  12. Reacties op deze tutorial

Gedetailleerde foutinformatie verkrijgen met exceptions

Zoals ik al eerder zei, kunnen we met exceptions zeer eenvoudig gedetailleerde informatie geven over de fout die is opgetreden. De Exception klasse biedt daarom naast de methode getMessage(), die we al eerder zagen, nog enkele andere methoden die meer kunnen vertellen.

De methoden die de Exception klasse ter beschikking heeft zijn de volgende:
  • getMessage() - De foutmelding waarmee de exception aangemaakt is
  • getCode() - De code die aan de exception is meegegeven
  • getFile() - Het bestand waarin de exception gegooid is
  • getLine() - Het regelnummer waarop de exception gegooid is
  • getTrace() - Een array met daarin de backtrace
  • getTraceAsString() - De backtrace als string

Laten we weer eens kijken naar een voorbeeld:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
ini_set
('display_errors''On');
error_reporting(E_ALL);

$getal 4;
try
{
    if(
$getal <= 5)
    {
        throw new 
Exception('Het getal '.$getal.' is niet groter dan 5');
    }
    echo 
'Groter dan 5!';
}
catch(
Exception $e)
{
    echo 
'Error: '.$e->getMessage().'<br />';
    echo 
'Code: '.$e->getCode().'<br />';
    echo 
'File: '.$e->getFile().'<br />';
    echo 
'Line: '.$e->getLine().'<br />';
}
?>

We zien dat alleen het catch blok veranderd is en dat er meer informatie weergegeven wordt. De output ziet er nu dan ook als volgt uit:
Code
1
2
3
4
Error: Het getal 4 is niet groter dan 5
Code: 0
File: C:\wamp\www\test.php
Line: 10

Uiteraard kun je in een catch blok elke manier van foutafhandeling toepassen die je maar kunt bedenken. Dus zoals in dit voorbeeld het tonen op het scherm, maar ook de fout mailen naar een emailadres of opslaan in een database behoort tot de mogelijkheden. Met de standaard exception klasse heb je bovenstaande methoden tot je beschikking om een gedetailleerde foutmelding aan te maken.

Waar het gebruik van exceptions voornamelijk tot zijn recht komt is binnen het object georiƫnteerd programmeren. Je kunt je niet veroorloven om vanuit een klasse output te gaan geven, vandaar dat je een exception gebruikt die je afvangt bij bijvoorbeeld het instantiƫren van die klasse.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
ini_set
('display_errors''On');
error_reporting(E_ALL);

class 
Gebruiker
{
    protected 
$sGebruikersnaam;
    protected 
$iLeeftijd;
    
    public function 
__construct($sGebruikersnaam$iLeeftijd)
    {
        
$this->sGebruikersnaam $sGebruikersnaam;
        if(
is_numeric($iLeeftijd))
        {
            
$this->iLeeftijd $iLeeftijd;
        }
        else
        {
            throw new 
Exception('Aanmaken instantie van "'.__CLASS__.'" mislukt: Geen geldige waarde voor parameter leeftijd.');
        }
    }
}

try
{
    
$oGebruiker = new Gebruiker('Henk''test');
}
catch(
Exception $e)
{
    echo 
'Error: '.$e->getMessage().'<br />';
    echo 
'Code: '.$e->getCode().'<br />';
    echo 
'File: '.$e->getFile().'<br />';
    echo 
'Line: '.$e->getLine().'<br />';
}
?>

Dit voorbeeld laat zien wat er gebeurt als we een instantie aan proberen te maken van de klasse 'Gebruiker' maar geen geldige tweede parameter meegeven (de leeftijd moet een integer zijn). De output is de volgende:
Code
1
2
3
4
Error: Aanmaken instantie van "Gebruiker" mislukt: Geen geldige waarde voor parameter leeftijd.
Code: 0
File: C:\wamp\www\test.php
Line: 19

Op deze manier kunnen we de fouten die binnen een klasse optreden afvangen en een nette foutmelding genereren.

Vorige Volgende