Database class

  • 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.



    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.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • 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.

  • @BrokenTrack: JavaDoc? PHPDoc in PHP. :p


    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


  • 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.

  • $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?

  • 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.

  • 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:



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


    http://nl3.php.net/manual/en/keyword.extends.php


  • Is deze functie zo goed? Of zijn er nog meer verbeteringen. En hebben jullie suggesties welke andere functies er in een goede database class moeten zitten?


  • Dit heb ik tot nu toe dan, nog meer verbeter punten? En wat staat er nog meer in een goede database class (insert select update delete).

  • 1) Haal die @ weg aub, het is over het algemeen geen goed idee om fouten te onderdrukken.
    2) Voeg meer methoden toe, nu heb je er niets aan.
    3) Als je verbinding moet maken met twee verschillende databases, hoe ga je dat nu doen?
    - de class copy-pasten en de gegevens aanpassen?
    - setters maken?
    - iets anders?
    4) Je gebruikt in de if $hasConnection terwijl het $this->hasConnection hoort te zijn.
    5) === controleert op waarde en op type, voorbeeldje:


    6) Je zou Database::$hasConnection weg kunnen laten en "$this->connection instanceof MySQLi" kunnen gebruiken

  • Die @staat er omdat mysqli anders zegt dat $host geen variabele mag zijn.


    Verder heb ik de class uitgebreid met query uitvoeren en rows teruggeven. Fetchen etc. komt er nog in.


    Ik zit erover na te denken om voor select, update, delete en insert aparte functies te schrijven.


    Dit is hem tot nu toe:


    Ik vraag me alleen af of $this->connection->query werkt..


    Verder hoor ik graag verbeter punten etc.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!