Verbesserungsvorschläge für eine File-Klasse

daddz

Mitglied
Hi,
ich hab mich mal daran gemacht eine File-Klasse zu schreiben.(Hab sowas bis jetz noch nirgends gesehen --> vielleicht bin ich auch blind ;) ) Soweit funktioniert auch alles. Aber vielleicht hättet ihr ein paar Vorschläge, wie ich es besser machen könnte. (bin nich so der Profi in Sachen OOP). :rolleyes:
Hier mal der Code:
PHP:
<?php
class my_file {
	var $filename;
			
	function my_file() {
		$this->filename = $filename;
	}
	
	function my_file_create($filename) {
		if(file_exists($filename)) {
			$this->my_file_error(1);
		}
		else {
			$file = fopen("$filename", "w");
			fclose($file);
			if(file_exists($filename)) {
			    return true;
			}
			else {
				$this->my_file_error(2);
				return false;
			}
		}
	}
	
	function my_file_read($filename) {
		if(!file_exists($filename)) {
			$this->my_file_create($filename);
			$this->my_file_read($filename);
		}
		else {
			$file = fopen("$filename", "r");
			if($file) {
				while(!feof($file)) {
					$index[] = fgets($file, 128);
				}
			}
			else {
				$this->my_file_error(3);
			}
		}
		return $index;
	}
	
	function my_file_write($filename, $value, $mode) {
		if(!file_exists($filename)) {
			$this->my_file_create($filename);
			$this->my_file_read($filename);
		}
		else {
			$file = fopen("$filename", "$mode");
			if($file) {
				fwrite($file, $value);
				return true;
			}
			else {
				$this->my_file_error(3);
				return false;
			}
		}
		
	}
	
	function my_file_error($errorcode) {
		$errmsg = $this->my_file_read("errorcodes.txt");
		$err = $errorcode - 1;
		echo $errmsg[$err];
	}
	
	function my_file_setRights($filename, $mode) {
		chmod($filename, $mode);
	}
	
	function my_file_chkExist($filename) {
		if(file_exists($filename)) {
			return true;
		}
		else {
			return false;
		}
	}
}
?>
Danke schon mal!

greetz
daddz
 
Mir mag gerade der Sinn von

PHP:
 function my_file() {
        $this->filename = $filename;
    }

nicht so recht aufgehen. Du übergibst der Methode keine Variable, woher nimmt sie also die Information, was in $filename steht und wozu überhaupt ist die Methode gut?

Vielleicht steh ich grade nur etwas auf dem Schlauch, weil ich momentan ein bischen Java geprägt bin. Wenn dem so ist, klär(t) mich bitte auf.
 
Tatsächlich. Das ergibt überhaupt keinen Sinn! :rolleyes: Weiß auch nicht warum ich das gemacht habe. Wahrscheinlich nur weil es dann nicht so leer ist! ;-]

greetz
daddz
 
Mir fällt jetzt auch noch auf das die letzte Funktion ebenso total sinnlos ist! Da mach ich aus einer Zeile Code (if(file_exists){ .....) eine ganze Funktion. Tztztz...was war nur los als ich die geschrieben hab!
Ist die Klasse so "perfekt" das es nichts mehr zu beanstanden gibt? ;-]
Da hab ich wohl gute Arbeit geleistet! ;)

greetz
daddz
 
Ist die Klasse ansonsten so gut? Oder warum hat keiner nen Verbesserungsvorschlag?
Was haltet ihr eigtentlich von der Klasse?

greetz
daddz
 
Ich sehe den Sinn einer Klasse nicht so ganz, wenn Du jeder Methode den Dateinamen übergibst, außer beim Konstruktor. Normalerweise macht man das bei einer Klasse anders herum.
 
Also du meinst das es dann so is:
PHP:
function my_file($filename) { ....
wenn ich dich richtig verstanden hab!
Sieht jetzt im Nachhinein auch einleuchtender aus! Danke!

greetz
daddz
 
Vor allem meine ich, dass Du den Dateinamen bei den anderen Methoden aus dem Objekt selbst ziehen solltest und nicht jedesmal übergeben solltest. Sonst ist die Klasse ja praktisch statisch und damit bei PHP nahezu überflüssig. Dann ließe sich die Funktionalität genau so leicht über Funktionen lösen.
Eine Klasse mag die Methoden nur noch besser kapseln.
Den Konstruktor bräuchtest Du nicht, da Du nie ein Objekt initialisieren müsstest, um die Methoden zu nutzen.
 
Also ich habe die Klasse jetzt ein bisschen überarbeitet. Sagt mir bitte wenn ich jetzt daraus totalen Schwachsinn gemacht habe! ;-]
PHP:
<?php
class my_file {
	private $fname;
	public $fmode;
	public $fvalue;
	public $fchmod;
			
	function my_file($filename) {
		$this->fname = $filename;
		$this->fmode = "w";
		$this->fvalue = "";
	}
	
	function my_file_create() {
		if(file_exists($this->fname)) {
			$this->my_file_error(1);
		}
		else {
			$file = fopen("".$this->fname."", "w");
			fclose($file);
			if(file_exists($this->fname)) {
			    return true;
			}
			else {
				$this->my_file_error(2);
				return false;
			}
		}
	}
	
	function my_file_read() {
		if(!file_exists($this->fname)) {
			$this->my_file_create();
			$this->my_file_read();
		}
		else {
			$file = fopen("".$this->fname."", "r");
			if($file) {
				while(!feof($file)) {
					$index[] = fgets($file, 128);
				}
			}
			else {
				$this->my_file_error(3);
			}
		}
		return $index;
	}
	
	function my_file_write() {
		if(!file_exists($this->fname)) {
			$this->my_file_create();
			$this->my_file_write();
		}
		else {
			$file = fopen("".$this->fname."", "".$this->fmode."");
			if($file) {
				fwrite($file, $this->fvalue);
				return true;
			}
			else {
				$this->my_file_error(3);
				return false;
			}
		}
		
	}
	
	function my_file_error($errorcode) {
		$this->fname = "errorcodes.txt";
		$errmsg = $this->my_file_read();
		$err = $errorcode - 1;
		echo $errmsg[$err];
	}
	
	function my_file_setRights() {
		chmod($this-fn, $this->fchmod);
	}
}
?>

[EDIT]
Des mit private und public hat nich ganz gestimmt...zu viel C++ im Kopf in letzter Zeit :rolleyes: habs gleich mal ausgebessert!
[/EDIT]

greetz
daddz
 
Zuletzt bearbeitet:
Entspricht auf jeden Fall meinem Verständnis von OOP.
Schwachsinn ist das nicht!
Inhaltlich gehe ich mal davon aus, dass die Funktionen tun, was sie sollen.
Du solltest die Methoden noch kommentieren, zum Beipiel nach PHP Doc Syntax und genau reinschreiben, was sie prüfen und was sie in welchem Fall tun.
Vielleicht baust Du ja auch noch Methoden zum kopieren, verschieben oder löschen ein, so als Anregung. Verallgemeinert könnte man das natürlich noch auf Verzeichnisse erweitern und Unterverzeichnisse mitkopieren :-(

Gruß hpvw
 
Zurück