Verbesserungsvorschläge für eine File-Klasse

Auch wenn du das wahrscheinlich nicht hören willst, aber ich finde die Klasse absolut überflüssig. Um eine Datei auszulesen, muss erst ein Objekt erstellt werden, anschließend wird die Methode Read() aufgerufen, die ein Array zurück gibt, was anschließend noch zusammengesetzt werden muss. Zudem wird aller 128 Zeichen je Zeile das Rückgabe-Array unsinnigerweise erweitert. Auch funktioniert die Klasse nicht auf Windows-Servern, da der Binäre Lese-Zugriff ("rb") nicht unterstützt wird. Befindet sich die Datei "errorcodes.txt" nicht im selben Verzeichnis, wie das aufgerufene Script, dann läuft sogar das Error-Handling der Klasse schief.

Da bleibe ich doch lieber bei [phpf]file_get_contents[/phpf] oder [phpf]file[/phpf], um Dateien auszulesen. Das ist kürzer.

Und selbst beim Schreiben wird es nicht einfacher. Objekt erstellen -> Schreibmodus setzen -> Inhalt setzen -> Methode Write() aufrufen. Sorry, aber da schreibt man 4 Zeilen, wohingegen man herkömmlich nur 3 benötigt. Und lustigerweise schließt du die Dateien nicht einmal nach dem Lesen und Schreiben.

Lass dich trotzdem nicht entmutigen,

Sven
 
Die Klasse ist im Moment vielleicht noch überflüssig...aber durch einige Optimierungen wird sie sicher sinnvoll...und genau deshalb habe ich diesen Thread ja auch gestartet...um die Klasse zu optimieren!
Also des mit den 128 Zeichen is wirklich Schwachsinn..da muss ich dir Recht geben! :-(
Der Binäre Lesezugriff lässt sich doch ganz einfach einfügen und dann läuft das ganze auch auf Windows Servern! :rolleyes:
Und das mit dem zurückgelieferten Array is doch kein Problem...dann schreib ich einfach noch eine Funktion mit der man den Inhalt ausgeben kann! Und das geht dann mit nur 1 Zeile! ;-] Das mit den Dateien schließen hatte ich ganz vergessen! Gut das du mich darauf hinweisst! ;-)

greetz
daddz
 
Ich hab jetzt noch weiter an der Klasse gearbeitet und hab jetzt auch noch eine Funktion zum ausgeben des Dateiinhalts hinzugefügt :rolleyes: Jetzt kann man die Datei mit nur 2 Zeilen Code auslesen! ;-] Außerdem hab ich fclose() hinzugefügt! (was ich ja zuvor vergessen habe :rolleyes: ). Desweiteren funktioniert das Script jetzt auch unter Windows-Servern, weil man jetzt auch noch auf binären Lesezugriff stellen kann :-)
Hier der neue Code:
PHP:
<?php
class DaddzFile {
	protected $fErr;
	protected $fbuffer;
	private $fName;
	private $fMode;
	private $fValue;
	private $fChmod;
			
	function DaddzFile($filename) {
		$this->fName = $filename;
		$this->fErr = "errorcodes.txt";
		$this->fbuffer = "";
		$this->fMode = "w";
		$this->fValue = "";
	}
	
	function Create() {
		if(file_exists($this->fName)) {
			$this->Error(1);
			return false;
		}
		else {
			$file = fopen("".$this->fName."", "w");
			fclose($file);
			if(file_exists($this->fName)) {
			    return true;
			}
			else {
				$this->Error(2);
				return false;
			}
		}
	}
	
	function Read() {
		if(!file_exists($this->fName)) {
			$this->Error(4);
			return false;
		}
		else {
			if($this->fMode == "w" OR $this->fMode == "w+" OR $this->fMode == "a" OR $this->fMode == "a+") {
				$this->fBuffer = $this->fMode;
				$this->fMode = "r";
			}
			$fFile = fopen("".$this->fName."", "".$this->fMode."");
			if($fFile) {
				while(!feof($fFile)) {
					$fIndex[] = fgets($fFile, 128);
				}
				$this->fMode = $this->fBuffer;
				unset($this->fBuffer);
				fclose($file);
				return $fIndex;
			}
			else {
				$this->Error(3);
				return false;
			}
		}
	}
	
	function Write() {
		if(!file_exists($this->fName)) {
			$this->Error(4);
			return false;
		}
		
		else {
			$file = fopen("".$this->fName."", "".$this->fMode."");
			if($file) {
				fwrite($file, $this->fValue);
				fclose($file);
				return true;
			}
			else {
				$this->Error(3);
				return false;
			}
		}
		
	}
	
	function EchoIndex() {
		$fBuffer = $this->Read();
		foreach($fBuffer as $element) {
			echo $element . "<br>";
		}
		unset($this->fBuffer);
	}
	
	private function Error($eErrorcode) {
		$this->fBuffer = $this->fName;
		$this->fName = $this->fErr;
		$fErrmsg = $this->Read();
		$fError = $eErrorcode - 1;
		echo $fErrmsg[$fError];
		$this->fName = $this->fBuffer;
		unset($eErrorcode);
		exit;
	}
	
	function SetRights() {
		chmod($this-fName, $this->fChmod);
		return true;
	}
	
	function SetFileMode($eMode) {
		unset($this->fMode);
		$this->fMode = $eMode;
		unset($eMode);
	}
	
	function GetFileMode() {
		return $this->fMode;
	}
	
	function SetWriteValue($eValue) {
		unset($this->fValue);
		$this->fValue = $eValue;
		unset($eValue);
	}
	
	function GetWriteValue() {
		return $this->fValue;
	}
	
	function SetChmodMode($eMode) {
		unset($this->fChmod);
		$this->fChmod = $eMode;
		unset($eMode);
	}
	
	function GetChmodMode() {
		return $this->fChmod;
	}
}

?>

greetz
daddz
 
*Thread_aus_den_unendlichen_Tiefen_des_Forums_ausgrab* ;)
Soo...ich bins mal wieder! Schade das sich niemand mehr zu der File-Klasse äußert! :(
Dank der ausführlichen Posts von hpvw ;) hat sich ja vieles verändert an der Klasse. Ich hoffe auch das sie jetzt endlich mal Sinn ergibt! Oder wird sie das nie?
Ich hoffe ihr könnt mir noch helfen

greetz
daddz
 
Zurück