OOP database class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Joakim Broden

Joakim Broden

25/08/2011 11:13:45
Quote Anchor link
Ozzie PHP op 25/08/2011 10:12:30:
Dat was wel hoe ik het destijds gedaan had, maar dan deed ik het ongeveer op deze manier:


destijds? Hoe doe je het nu dan?
 
PHP hulp

PHP hulp

14/05/2024 13:14:54
 
Joakim Broden

Joakim Broden

26/08/2011 12:50:40
Quote Anchor link
Bumpje :) ben wel benieuwd hoe je het nu doet.
 
Ozzie PHP

Ozzie PHP

26/08/2011 14:26:26
Quote Anchor link
Ah nee, sorry... ik bedoelde dat ik het destijds zo gedaan had. Nu zou ik weer voor diezelfde oplossing kiezen :)
 
Joakim Broden

Joakim Broden

26/08/2011 17:29:11
Quote Anchor link
Ah ok bedankt Ozzie. Wat vinden de andere PHP'ers van deze oplossing?
 
Jelmer -

Jelmer -

26/08/2011 18:53:48
Quote Anchor link
Quote:
In plaats van dat je dus allerlei verschillende soorten exceptions heb, gebruik je er slechts 1 (MyException) en daar stuur je alles naartoe. Aan de hand van de parameter wordt in de MyException class bepaald om wat voor soort Exception het gaat.

Ik zie hier niet echt een voordeel in boven verschillende exception classes die ieder hun eigen context-data bij zich kunnen hebben. Ook denk ik niet dat dit gemakkelijker is, omdat specifieke exceptions vangen niet langer triviaal is.

Voorbeeldje:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php

class UserStoreException extends Exception
{
    const ERROR_USERNAME_TAKEN = 1;
    const ERROR_EMAIL_INVALID = 2;
}


class MailException extends Exception
{}

function
insert_user($username, $email)
{

    if (!is_valid_email($email))
        throw new UserStoreException("The emailaddress is not valid",
            UserStoreException::ERROR_EMAIL_INVALID);
    
    $user_id = null;

    try {
        global $pdo;

        $stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");
        $stmt->execute(compact('username', 'email'));

        $user_id = $pdo->lastInsertId();
    }

    catch (PDOException $e)
    {

        if ($e->getCode() == 23000) // unique constraint failed
            throw new UserStoreException("Username already taken",
                UserStoreException::ERROR_USERNAME_TAKEN, $e);    
        else
            throw $e; // andere PDO exception, geen idee wat ik er mee moet
    }

    $password = generate_password();

    set_user_password($user_id, $password);

    send_password_email($email, $password);

    return $user_id;
}


try {
    insert_user($_POST['username'], $_POST['email']);
}

catch(UserStoreException $e)
{

    show_register_form();
}

catch (MailException $e)
{

    echo "Your account was created, but the password could not be mailed. Please request a new one";
}

catch (PDOException $e)
{

    echo "My database server and I are having an argument. Please steer clear till the winner has been decided";
}

catch (Exception $e)
{

    echo "Shit happens";
}


?>
 
Ozzie PHP

Ozzie PHP

26/08/2011 20:27:10
Quote Anchor link
Jelmerrr, ik snap jouw voorbeeld niet want dat is niet hoe ik het zou doen of hoe ik het bedoelde. In mijn geval heb je gewoon 1 try en 1 catch. In de catch wordt een aparte class aangeroepen die vervolgens een standaard view toont. Deze view kun je aanpassen (bijvoorbeeld een plaatje bijvoegen) al naar gelang om wat voor exception het gaat.
Gewijzigd op 26/08/2011 20:27:22 door Ozzie PHP
 
Jelmer -

Jelmer -

26/08/2011 21:41:30
Quote Anchor link
Dat voorbeeld is hoe ik het zou doen ;)

Niet alle errors zijn hetzelfde, en daarom zou ik ze ook niet allemaal hetzelfde behandelen. Moet dat dan toch, dan kan je aan het einde nog een pokemon-statement neerzetten die alles vangt, zoals ik ook heb gedaan.
 
Ozzie PHP

Ozzie PHP

26/08/2011 23:07:43
Quote Anchor link
Pokemon statement? Wat is dat dan weer :-)

Naja, ieder doet het op z'n eigen manier denk ik...
 
Jelmer -

Jelmer -

26/08/2011 23:29:23
 
Ozzie PHP

Ozzie PHP

27/08/2011 14:03:56
Quote Anchor link
Aha... got to catch 'em all!! Pokemon is van voor mijn tijd, maar het is dus eigenlijk vergelijkbaar met de "default" bij een switch?

Overigens wordt "mijn" manier vaker toegepast las ik zojuist terwijl ik naar die pokemon manier aan het zoeken was. Iemand op een forum zei: "Hmm, I've done this before. In web apps, it's a good idea to do it at the top level and dump out an error page." Dat is precies wat ik doe.
 
Ivo K

Ivo K

27/08/2011 14:15:28
Quote Anchor link
Ozzie PHP op 27/08/2011 14:03:56:
Aha... got to catch 'em all!! Pokemon is van voor mijn tijd, maar het is dus eigenlijk vergelijkbaar met de "default" bij een switch?


Haha, als Pokemon voor je tijd is dan ben je vijf of misschien nog wel niet geboren.
 
Ozzie PHP

Ozzie PHP

27/08/2011 14:37:10
Quote Anchor link
holy crap... je hebt gelijk :-DDD
ik bedoel het dus precies andersom... ik ben van voor pokemons tijd, hahaha :-)))
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

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.