Gedetailleerde foutinformatie verkrijgen

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 (php)
PHP script in nieuw venster Selecteer het PHP script
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 (php)
PHP script in nieuw venster Selecteer het PHP script
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 (php)
PHP script in nieuw venster Selecteer het PHP script
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 (php)
PHP script in nieuw venster Selecteer het PHP script
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.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.