Forum » Server-Side scripting » Database class
devow.nl
Berichten: 1592
avatar
Offline Stuur privebericht
Beste leden,

Omdat ik graag meer wil leren van classes wil ik graag jullie mening over mijn begin van de database class die ik aan het maken ben.

Code | Selecteer Alles
minimaliseren
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
class Database
{
    private 
$host;
    private 
$user;
    private 
$password;
    private 
$database;
    private 
$connection;
    private 
$connectionTrue;
    
    
    function 
dbData
    
{
        
$this->host 'localhost';
        
$this->user '';
        
$this->pw '';
        
$this->db '';
        
$this->connectionTrue FALSE;
    }
    
    function 
connect($host$user$password$database)
    {
        if(
$connectionTrue === FALSE)
        {
            
$connection = @new MYSQLi($host,$user,$password,$database);
            
            if(! 
$this->connection)
            {
                
$error 'Er kon geen verbinding met de database aangegaan worden.';
                die(
$error);
            }
            else
            {
                
$connectionTrue === TRUE;
            }
        }
    }
    
    
    
}


Hopelijk hebben jullie veel kritiek waar ik verder mee kan. Houdt het wel netjes, en beargumenteer je mening. Het is mijn eerste opzet, en mijn eerste grote class die ik wil gaan schrijven.
04-10-2011 17:44
Dit topic is 327 keer bekeken door 37 verschillende leden
Reacties op: "Database class"
1 | 2 Volgende pagina
Berichten: 693
avatar
Offline Stuur privébericht
Ik heb eigenlijk geen kritiek.
Ik vind het wel goed geschreven.
04-10-2011 18:34
Informatica Student
Berichten: 1406
avatar
Online Stuur privébericht
Misschien een Javadoc eraan toevoegen?

Overigens vind ik het zelf altijd erg vervelend als de waardes true en false met hoofdletters geschreven worden, maar dat is iets persoonlijks.

Verder mis ik bij dbData haakjes. En waarom initialiseer je ze via een functie? Je maakt de variabelen al in het begin aan maar doet en geeft geen waarde eraan.

Ook snap ik niet dat je parameters aan de connectie functie geeft. Je kan alles al ophalen via this neem ik aan.

Edit:
Misschien de namen public en final toevoegen aan een functie.
04-10-2011 18:40
Berichten: 2123
avatar
Offline Stuur privébericht
@BrokenTrack: JavaDoc? PHPDoc in PHP.

Ook ik snap de functie van dbData niet. Wat doet deze functie? En waar is deze goed voor?

Je connect methode stopt de uitvoer van het gehele script als het verbinden met de database mislukt. Dit is een slecht principe: Als de database verbinding mislukt, moet de class dit terug geven, en moet de gebruiker van de class moet het probleem oplossen. Zo kun je beslissen of je de script uitvoer wilt stoppen, of een deel over wil slaan.

Je zou een exception kunnen gooien als de verbinding mislukt, of de methode connect true of false laten returnen.

http://php.net/manual/en/language.exceptions.php
04-10-2011 18:46
Luc
devow.nl
Berichten: 1592
avatar
Offline Stuur privébericht
Code | Selecteer Alles
minimaliseren
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
<?php
class Database
{
    private 
$host 'localhost';
    private 
$user '';
    private 
$password '';
    private 
$database '';
    private 
$connection '';
    private 
$connectionTrue false;

    
    public function 
connect()
    {
        if(
$connectionTrue === false)
        {
            try
            {
                
$this->connection = @new MYSQLi($this->host,$this->user,$this->password,$this->database);
                return 
$this->connectionTrue true;
            }
            catch (
Exception $e) {
            {
                return 
'Caught exception: ',  $e->getMessage(), "\n" $this->connectionTrue;
            }
        }
    }    
}
?>


Is dit zo beter?

Verder ben ik c# classes gewend en daar gebruikte ik steeds getters en setters. Dar was dus eigenlijk die functie voor bedoeld

De === heb ik ergens ooit gelezen dat die ook echt waar moet zijn (hoofdletter gevoelig). Weet niet meer waar ik dat ooit heb gelezen, maar dat heb ik me een beetje aangeleerd om te gebruiken bij belangrijke functies.

Verder had ik static gedaan omdat ik dacht dat hij tog niet veranderd.. Heb het alweer weggehaald.
04-10-2011 18:48
Informatica Student
Berichten: 1406
avatar
Online Stuur privébericht
$connectionTrue moet natuurlijk zonder die quotes neem ik aan.
Verder ben je eigenlijk ??n false vergeten te veranderen naar kleine letters.

Overigens, waarom maak je hem static? Verder doe je normalitair "function" achteraan en public/private/etc als eerst.

Ook zeg je op het laatst, $connectionTrue === true. ??n isje is voldoende lijkt mij.

@Killing, ik heb nog nooit van PHPDoc gehoord. In wat voor opzicht verschilt dat met JavaDoc?
04-10-2011 18:51
Berichten: 2123
avatar
Offline Stuur privébericht
Nee, eigenlijk niet. Waarom is je connect methode static? Dit is nergens goed voor. Daarbij maakt je statische methode connect gebruik van niet statische properties ($this->connect), wat in principe niet mogelijk is.
04-10-2011 18:54
Informatica Student
Berichten: 1406
avatar
Online Stuur privébericht
Dat van === klopt. Maar voor het geven van een waarde blijf je nog steeds een enkele = gebruiken. === is voor vergelijkingen.

Verder moet je niet vergeten om bij de rest ook $this te gebruiken, anders zeg je dat enkel $connectionTrue true is binnen de functie en niet binnen de klasse.
04-10-2011 18:59
Luc
devow.nl
Berichten: 1592
avatar
Offline Stuur privébericht
Haha ik zie het nu pas dat ik hem een waarde wil geven met === bedankt. En ik moet dus

$this->connection =
$this->connectionTrue = true; doen?
04-10-2011 19:01
Informatica Student
Berichten: 1406
avatar
Online Stuur privébericht
Ja.

Edit:
Mogelijk wil je ook false/true returnen ipv enkel een mogelijke exception zoals Killing eerder zei.
04-10-2011 19:03
Berichten: 2123
avatar
Offline Stuur privébericht
De exception is prima. Wat je nu verkeerd doet, is het afvangen van de exception. Alleen het gooien van de exception doe je in de methode (throw), en het opvangen in de code die gebruikt maakt van je class.

Dit komt er dan zo uit te zien:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
<?php

try {
  
$database = new Database;
  
$database->connect();
} catch(
DatabaseException $ex) {
  echo 
'Database verbinding mislukt: '$ex->getMessage();
}

?>


De class DatabaseException moet je dan nog wel even aanmaken, als uitbreiding op Exception (extends).

http://nl3.php.net/manual/en/keyword.extends.php
04-10-2011 19:10
Reageer op: "Database class"
1 | 2 Volgende pagina
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden