Versio

OOP Begin

Overzicht Reageren

Sander de Vos

Sander de Vos

29/07/2011 10:57:05
Quote Anchor link
Beste,

Ik ben maar weer eens aan de slag gegaan met PHP OOP.
Vooral omdat ik graag wil overstappen op PDO, maar niet bij iedere query een foutafhandeling wil bouwen. Bij m'n MySQL functie werd ik namelijk bij iedere fout op de hoogte gesteld via e-mail.

Hier mijn class:
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
<?php
// Test
class test {
    // Variables
    private $mysql;
    
    // Minimum Settings
    public function __construct($database_server, $database_user, $database_password, $database_name) {
        $this->database_server = $database_server;
        $this->database_user = $database_user;
        $this->database_password = $database_password;
        $this->database_name = $database_name;
        
        $this->database_connection();
    }

    
    // MySQL Connection
    private function database_connection() {
        try {
            $this->mysql = new PDO('mysql:host=' . $this->database_server . ';dbname=' . $this->database_name, $this->database_user, $this->database_password);
            $this->mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
catch(PDOException $error) {
            echo $this->database_error($error);
        }
    }

    
    // Test
    public function test() {
        try {
            $result = $this->mysql->query("SELECT * FROM cms_pages");
            foreach($result as $row) {
                return $row['code'];
            }
        }
catch(PDOException $error) {
            echo $this->database_error($error);
        }
    }

    
    // Error Reporting
    private function database_error($error) {
        if (mail('admin@soved.eu', 'Database Error', 'Regelnummmer: ' . $error->getLine() . "\r\n" . 'Bestand: ' . $error->getFile() . "\r\n" . 'Foutmelding: ' . $error->getMessage())) {
            return $error->getMessage() . ' <b>We already contacted the administrator.</b>';
        }
else {
            return $error->getMessage() . ' <b>We also failed to contact the administrator.</b>';
        }
    }
}


$test = new test('localhost', 'root', '', 'test');
echo $test->test();
?>


Doe ik het goed, of ga ik heel de verkeerde kant op?
Alvast bedankt voor het antwoorden!
Gewijzigd op 29/07/2011 10:57:42 door Sander de Vos
 
PHP hulp

PHP hulp

25/05/2012 12:49:42
Gesponsorde koppelingen:
 
Joren de Wit
Beheerder

Joren de Wit

29/07/2011 12:33:37
Quote Anchor link
Quote:
Vooral omdat ik graag wil overstappen op PDO, maar niet bij iedere query een foutafhandeling wil bouwen.

Waarom ben je nu bezig met het schrijven van een nieuwe database klasse? PDO voldoet prima aangezien er bij een fout gewoon een PDOException gegooid wordt die je kunt afvangen?

Kortom, wat is de meerwaarde van je eigen database klasse?

ps. En uiteraard hoef je dan niet na elke query foutafhandeling in te bouwen, dat doe je gewoon eenmalig in het catch blok waar je de exception afvangt...
Gewijzigd op 29/07/2011 12:34:21 door Joren de Wit
 
Sander de Vos

Sander de Vos

29/07/2011 12:42:21
Quote Anchor link
Ik ben niet bezig met het schrijven van een database klasse, maar van een cms klasse.
Daarom leek het me handig om de database connectie ook gewoon in de klasse te zetten.

Ik probeer dus bij iedere database error een e-mail te ontvangen met informatie over de foutmelding. Maar ik wil niet bij iedere query in het catch blok een e-mail opstellen. Daarom vangt de functie database_error de foutmelding op.

Maar is dit een juiste methode, of is daar een betere oplossing voor?
 
Joren de Wit
Beheerder

Joren de Wit

29/07/2011 13:19:31
Quote Anchor link
Sander de Vos op 29/07/2011 12:42:21:
Ik ben niet bezig met het schrijven van een database klasse, maar van een cms klasse.

Dit klinkt alsof je niet helemaal op de goede weg bent. Een CMS is een systeem dat, als je het goed OO programmeert, altijd uit meerdere klasses bestaat. Als je met slechts 1 klasse bezig bent, lijkt dat meer op een verzameling van functies dan daadwerkelijk een goede implementatie van de OO denkwijze.

En ja, je kunt prima een klasse schrijven die de foutafhandeling verzorgt zoals jij die wenst. Maar die zul je dan altijd aanroepen in het catch blok waar je de PDOException afvangt, als je PDO gebruikt tenminste. Dus iets als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
try {
  $db = new PDO(...);
  
  // ...

  $db->query($sql);
}

catch(PDOException $e) {
  $error = new DatabaseError($e);
  $error->sendEmail();
}

?>

De klasse die je nu alleen nog hoeft te schrijven is DatabaseError waarin je de foutafhandeling verder programmeert.
 
Sander de Vos

Sander de Vos

29/07/2011 13:31:31
Quote Anchor link
Ik ben ook bezig met het schrijven van meerdere klasses. Dit is alleen een begin van de database klasse die er nog moet komen.

Dus gewoon de class/functie aanroepen in het catch blok die de fout afhandelt.

Bedankt voor je hulp!
 
Ozzie PHP

Ozzie PHP

29/07/2011 13:32:51
Quote Anchor link
Lees anders eerst even deze OOP handleiding van ene... ehhh... Joren.... ;-)
(de inhoudsopgave staat aan de rechterkant)

http://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/
 
Joren de Wit
Beheerder

Joren de Wit

29/07/2011 13:34:49
Quote Anchor link
Ozzie PHP op 29/07/2011 13:32:51:
Lees anders eerst even deze OOP handleiding van ene... ehhh... Joren.... ;-)

Offtopic:
Lol. Ik moet er nog steeds hoofdstukken aan toevoegen :-)
 
Ozzie PHP

Ozzie PHP

29/07/2011 13:37:31
Quote Anchor link
Offtopic: waar wacht je nog op ;)
Wel handig hoor zo'n handleiding. Ik ga zeer binnenkort beginnen met het technische deel van m'n CMS. Dan ga ik eerst de handleiding weer even doorlezen :)
 
Sander de Vos

Sander de Vos

29/07/2011 13:43:33
Quote Anchor link
Haha, dat had ik al gedaan. Deze vond ik ook erg handig: http://www.sitemasters.be/tutorials/1/1/567/PHP/OOP_Een_begin_maken_met_OOP.

Toch bedankt :)
 
Pim -

Pim -

01/08/2011 02:45:52
Quote Anchor link
Een abstractielaagje over pdo kan toch ooit kwaad? Doctrine dbal is bijvoorbeeld best mooi en handig.
 
Ozzie PHP

Ozzie PHP

01/08/2011 02:53:01
Quote Anchor link
Pim - op 01/08/2011 02:45:52:
Een abstractielaagje over pdo kan toch ooit kwaad? Doctrine dbal is bijvoorbeeld best mooi en handig.

Ik neem aan dat je bedoelt "kan toch nooit kwaad".
 
Pim -

Pim -

01/08/2011 02:58:54
Quote Anchor link
Dat klopt ja ;)
 



Overzicht Reageren

Get Adobe Flash player