Headymaster
Erfahrenes Mitglied
Hallo!
Habe ein Problem mit dem __autoload() Interzeptor.
So ich habe um das ganze mal zu testen ein paar Dateien angelegt.
Also index.php:
So hier wird halt ein datahandler Objekt angelegt und es werden exceptions aufgefangen und in Fehlermeldungen umgewandelt.
So wenn ich aber nun meine eigenen exception-Klassen nicht extra einbinden will sondern über so genanntes Lazy-Loading laden will, dann habe ich ein Problem.
Hier mal der Anfrang meiner Datahandler-Klasse:
So nun bekomme ich aber immer noch den Fehler, dass die exceptions-klassen nicht gefunden wurden.
Mache ich mit dem autoload Interzeptor was falsch..?!
Würde mich super über Hilfe freuen
MFG Niels
Habe ein Problem mit dem __autoload() Interzeptor.
So ich habe um das ganze mal zu testen ein paar Dateien angelegt.
Also index.php:
PHP:
include("datahandler.php");
// Objekte instanzieren
try
{
$peter = new datahandler('logs', 'php');
$peter->open();
$peter->lock();
while(!$peter->endofFile())
{
$fields = $peter->readLine();
print "{$fields[0]} <{$fields[1]}>\n<br>";
}
$peter->close();
}
catch(exceptions_Exists $e)
{
die("Die angeforderte Datei ist nicht vorhanden");
}
catch(exceptions_IO $e)
{
die("Es liegt ein Dateifehler vor, bitte korrigieren Sie den Administrator");
}
catch(exceptions_CSV $e)
{
die("Das Format der Datei ist nicht korrekt, bitte korriegieren Sie dies");
}
catch(Exception $e)
{
print $e;
exit();
}
So hier wird halt ein datahandler Objekt angelegt und es werden exceptions aufgefangen und in Fehlermeldungen umgewandelt.
So wenn ich aber nun meine eigenen exception-Klassen nicht extra einbinden will sondern über so genanntes Lazy-Loading laden will, dann habe ich ein Problem.
Hier mal der Anfrang meiner Datahandler-Klasse:
PHP:
class datahandler
{
protected $filename;
protected $filetyp;
protected $fp;
// Benötigte Klassen laden
function __autoload($className)
{
$fileName = $className . '.php';
require $fileName;
}
// Konstruktor
public function __construct($filename, $filetyp)
{
$this->filename = $filename;
$this->filetyp = $filetyp;
}
############## Mainpart Klasse ##############
// OPEN
public function open($mode = 'r')
{
if(!file_exists($this->filename .'.'. $this->filetyp))
{
throw new exceptions_Exists('Datei nicht vorhanden');
}
$this->fp = fopen($this->filename .'.'. $this->filetyp, $mode);
if($this->fp === FALSE)
{
throw new exceptions_IO('Konnte Datei nicht öffnen');
}
return TRUE;
}
// LOCK
public function lock($mode = LOCK_SH)
{
if(flock($this->fp, $mode) === FALSE)
{
throw new exceptions_IO('Konnte Datei-Lock nicht erhalten');
}
}
// READLINE
public function readLine()
{
$line = fgets($this->fp, 1024);
if($line === FALSE)
{
throw new exceptions_IO('Konnte Zeile nicht auslesen');
}
$fields = explode(',', trim($line));
if(count($fields) !== 2)
{
throw new exceptions_CSV('Zeile hat ein ungültiges Format');
}
return $fields;
}
// END OF FILE
public function endofFile()
{
return feof($this->fp);
}
// FILE CLOSE
public function close()
{
fclose($this->fp);
}
}
So nun bekomme ich aber immer noch den Fehler, dass die exceptions-klassen nicht gefunden wurden.
Mache ich mit dem autoload Interzeptor was falsch..?!
Würde mich super über Hilfe freuen
MFG Niels