Volgende code probeert verbinding te maken met een MySql database. Aangezien de meegegeven parameters voor de login niet correct zijn, zet de functie CustomErrorHandler de warning om naar een exception.
Die exception slaat een foutmelding op in een algemene class voor errorhandling (regel 79). De class voor errorhandling is voorlopig nog héél erg simpel gehouden.
Als je regel 95 van de code bekijkt zou je dus de melding 'Errors gevonden' op je scherm verwachten. Toch krijg ik een blank scherm te zien.
Bijkomende info:
php versie = 5.1.4
<?php
function CustomErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
{
// echo '<p><b>Error '.$errno.'</b><br><font color=\'red\'><i>'.$errstr.'<br>'.$errfile.' line '.$errline.'</i></font></p>';
throw new Exception($errstr);
}
set_error_handler('CustomErrorHandler');
final class CoreErrorHandler
{
private static $errors = array();
public static function addError($errmsg)
{
self::$errors[] = $errmsg;
}
public static function getErrors()
{
return self::$errors;
}
public static function hasErrors()
{
return count(self::$errors);
}
}
final class CoreDatabase
{
private static $dbInstance;
private $dbHandler;
private $dbHost;
private $dbUser;
private $dbPass;
private $dbName;
public static function singleton($dbHost='', $dbUser='', $dbPass='', $dbName='')
{
if (!self::$dbInstance)
{
self::$dbInstance = new CoreDatabase($dbHost, $dbUser, $dbPass, $dbName);
}
return self::dbInstance;
}
private function __construct($dbHost, $dbUser, $dbPass, $dbName)
{
$this->dbHost = $dbHost;
$this->dbUser = $dbUser;
$this->dbPass = $dbPass;
$this->dbName = $dbName;
$this->connect();
}
private function __destruct()
{
unset($this->dbHost);
unset($this->dbUser);
unset($this->dbPass);
unset($this->dbName);
$this->disconnect();
}
private function connect()
{
try
{
$this->dbHandler = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);
}
catch(Exception $e)
{
CoreErrorHandler::addError($e->getMessage());
}
}
private function disconnect()
{
$this->dbHandler->close();
unset($this->dbHandler);
}
}
$db = CoreDatabase::singleton('localhost', 'username', 'password', 'database');
if(CoreErrorHandler::hasErrors())
{
//print_r(CoreErrorHandler::getErrors());
echo 'Errors gevonden';
}
else
{
echo 'De pagina is foutloos geladen.';
}
?>