__autoload() Prob

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:
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
 
Hallo Headymaster,

die __autoload() Funktion gehört nicht in eine Klasse, sondern am besten am Anfang der index.php.

Näheres dazu findest du auch hier.

Gruß

Devil
 
Zurück