login  Naam:   Wachtwoord: 
Registreer je!
Scripts > PHP > Overige scripts > [PHP5] dbAccess


Reacties op het script [PHP5] dbAccess

Offline  nemesiskoen
Gepost op: 05 november 2006 - 23:48
Gouden medaille

PHP expert




  1. } catch(Exception $e) {
  2. // hergenereer de exception
  3. throw new Exception($e->getMessage());
  4. }


grapjas

Offline  ikkedikke
Gepost op: 06 november 2006 - 12:18
PHP expert



wat is daar grappig aan?
als hij een error gooit in een functie die hij in zijn eigen klasse gebruikt is dit de beste manier hoor.
wat wel zo is is dat het misschien makkelijk is om verschillende exceptions te maken, zodat je in je script al onderscheid kan maken in je catch statements.
  1. <?
  2. class EXCEPTION_NOTEXISTINGDB extends MyException
  3. {
  4. public function __construct($oSqlResource,$iNum)
  5. {
  6. $aErrorData = $oSqlResource->getErrorData($iNum);
  7. $this->message = $oSqlResource->sDriver.' error: nr. '.$aErrorData['iErrno'].': De aangeroepen database ('.$aCredits['sDatabase'].') bestaat niet!';
  8. }
  9. }
  10. class EXCEPTION_DBNOTACCESSIBLE extends MyException
  11. {
  12. public function __construct($oSqlResource,$iNum)
  13. {
  14. $aErrorData = $oSqlResource->getErrorData($iNum);
  15. $this->message = $oSqlResource->sDriver.' error: nr. '.$aErrorData['iErrno'].': Niet genoeg rechten om de database ('.$aCredits['sDatabase'].') aan te roepen!';
  16. }
  17. }
  18. try
  19. {
  20. ....
  21. }
  22. catch(EXCEPTION_NOTEXISTINGDB $e)
  23. {
  24. echo $e;
  25. $e->log();
  26. }
  27. catch(EXCEPTION_DBNOTACCESSIBLE $e)
  28. {
  29. echo $e;
  30. }
  31. // ik heb dan een klasse MyException waarin de methodes log() en __toString() zijn gedefinieerd.

Offline  nemesiskoen
Gepost op: 06 november 2006 - 12:27
Gouden medaille

PHP expert




Als ik me niet heel erg vergis is:
  1. try {
  2. blaat(); // throws exception
  3. } catch(Exception $e) {
  4. throw new Exception($e->getMessage());
  5. }


Toch het zelfde als:
  1. blaat(); // throws exception


Prove me wrong!

Offline  Gerard
Gepost op: 06 november 2006 - 16:43
Ouwe rakker



Waarom laat je de mysql login informatie niet doorgeven via de constructor? Op deze manier is je class natuurlijk totaal niet dynamisch en gaat het hele effect van OOP juist weer verloren in mijn ogen.

Offline  Addow
Gepost op: 06 november 2006 - 20:40
Gouden medaille

PHP beginner




Citaat:
[I][B]Proximus[/B] schreef op 06 November 2006 - 16:43[/I]

Waarom laat je de mysql login informatie niet doorgeven via de constructor? Op deze manier is je class natuurlijk totaal niet dynamisch en gaat het hele effect van OOP juist weer verloren in mijn ogen.


Ik sluit me hierbij aan, en het zal dan ook 1 van de eerste aanpassingen zijn naar de toekomst toe. Tevens ook een functie fetch_object(), waar ik tegenwoordig voortdurend gebruik van maak. Maar ik wacht nog wat af met al m'n klassen uit te bouwen.

Vele servers waar ik op moet werken zijn nog ergens bij versie 4 blijven steken, gr$#é<mbl*...

Offline  Thomas
Gepost op: 07 november 2006 - 14:20
Moderator



Het ziet er wel aardig uit, maar bij dit soort classes moet je opletten dat je niet een soort van collectie wrappers maakt voor bestaande mysql-functies (waar het nu toch wel een beetje op lijkt).

db-gegevens zou ik idd meegeven als parameters van de constructor.

Errorhandling kan uitgebreid worden door mysql_error() en de query te loggen naar een bestand o.i.d..

Je zou hier nog een database abstraction layer van kunnen maken, door ondersteuning te bieden voor meerdere database-typen naast MySQL, dan wordt zo'n class pas echt interessant.

Wat is trouwens het nut van de methode endTransaction()?

Een transactie eindigt altijd (lijkt mij) door hem te committen of een rollback uit te voeren, en daarvoor heb je al methoden. De methode endTransaction() lijkt mij dus overbodig.

Transacties zullen trouwens alleen werken als je database-tabellen van het ADODB-type gebruikt, tenzij MyISAM (default) tegenwoordig ook transacties ondersteunt?

Offline  Wave6
Gepost op: 28 november 2008 - 10:46
PHP beginner



Opzich ziet het er wel goed uit.
Door je scopes erg duidelijk!

Maar je vergeet 1 regel! "Loose coupling, strong cohesion!"
En daar maak jij niet echt gebruik van aangezien je globale variable in je class zet... Een beetje jammer.
Zorg dat je klassen onafhankelijk zijn!

Maar verder wel een nette class!!


Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.07s