Reacties op het script [PHP5] dbAccess
|
Gepost op: 05 november 2006 - 23:48 |
|
|
|
PHP expert
|
} catch(Exception $e) {
// hergenereer de exception
throw new Exception($e->getMessage());
}
} catch(Exception $e) { // hergenereer de exception throw new Exception($e->getMessage()); }
grapjas |
|
|
|
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.
<?
class EXCEPTION_NOTEXISTINGDB extends MyException
{
public function __construct($oSqlResource,$iNum)
{
$aErrorData = $oSqlResource->getErrorData($iNum);
$this->message = $oSqlResource->sDriver.' error: nr. '.$aErrorData['iErrno'].': De aangeroepen database ('.$aCredits['sDatabase'].') bestaat niet!';
}
}
class EXCEPTION_DBNOTACCESSIBLE extends MyException
{
public function __construct($oSqlResource,$iNum)
{
$aErrorData = $oSqlResource->getErrorData($iNum);
$this->message = $oSqlResource->sDriver.' error: nr. '.$aErrorData['iErrno'].': Niet genoeg rechten om de database ('.$aCredits['sDatabase'].') aan te roepen!';
}
}
try
{
....
}
catch(EXCEPTION_NOTEXISTINGDB $e)
{
echo $e;
$e->log();
}
catch(EXCEPTION_DBNOTACCESSIBLE $e)
{
echo $e;
}
// ik heb dan een klasse MyException waarin de methodes log() en __toString() zijn gedefinieerd.
<? class EXCEPTION_NOTEXISTINGDB extends MyException { public function __construct($oSqlResource,$iNum) { $aErrorData = $oSqlResource->getErrorData($iNum); $this->message = $oSqlResource->sDriver.' error: nr. '.$aErrorData['iErrno'].': De aangeroepen database ('.$aCredits['sDatabase'].') bestaat niet!'; } } class EXCEPTION_DBNOTACCESSIBLE extends MyException { public function __construct($oSqlResource,$iNum) { $aErrorData = $oSqlResource->getErrorData($iNum); $this->message = $oSqlResource->sDriver.' error: nr. '.$aErrorData['iErrno'].': Niet genoeg rechten om de database ('.$aCredits['sDatabase'].') aan te roepen!'; } } try { .... } catch(EXCEPTION_NOTEXISTINGDB $e) { $e->log(); } catch(EXCEPTION_DBNOTACCESSIBLE $e) { } // ik heb dan een klasse MyException waarin de methodes log() en __toString() zijn gedefinieerd.
|
|
|
|
Gepost op: 06 november 2006 - 12:27 |
|
|
|
PHP expert
|
Als ik me niet heel erg vergis is:
try {
blaat(); // throws exception
} catch(Exception $e) {
throw new Exception($e->getMessage());
}
try { blaat(); // throws exception } catch(Exception $e) { throw new Exception($e->getMessage()); }
Toch het zelfde als:
blaat(); // throws exception
blaat(); // throws exception
Prove me wrong! |
|
|
|
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. |
|
|
|
Gepost op: 06 november 2006 - 20:40 |
|
|
|
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*... |
|
|
|
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? |
|
|
|
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. |
|
|
|