Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 17-Oct-2005
< Voriger Tag   Nächster Tag >

Montag, 17. Oktober 2005

YD_FileReader: Beispiele und Dokumentation

YD_FileReader ist eine PHP-Klasse zum Verarbeiten von Dateien, die u.a. für das Schreiben von Lexern/Tokenizer gedacht ist. Sie bietet Methoden wie unreadChar() und findLine().

Im Gegensatz zu YD_FileHandle ist dies eine Klasse, die ich in dieser Form brauche. So zählt sie automatisch während des Einlesens die Zeilennummern und Spaltenposition und enthält mit readUntilMatch() eine Methode, die einen Text solange Zeile für Zeile einliest bis eine bestimmte Zeile gefunden wird (reguläre Ausdruck), was ich z.B. im Preprocessor nutze.

Composing statt Vererbung

Eigentlich ist es ja naheliegend YD_FileReader von YD_FileHandle abzuleiten, da YD_FileReader spezieller als YD_FileHandle ist. Allerdings bietet YD_FileReader nur Methoden zum Lesen, während YD_FileHandle auch Methoden zum Schreiben enthält. In PHP 5 könnte man diese im YD_FileReader als private deklarieren und so umbrauchbar machen. Das geht aber zum einen nicht in PHP 4 und zum anderen kann YD_FileHandle ja jederzeit weitere Methoden bekommen, die nicht in YD_FileReader reinpassen. Daher Composing und keine Vererbung.

YD_FileReader ist also eine eigenständige Klasse, die jedoch auf YD_FileHandle zurückgreift.

CLASS YD_File_FileReader extends PEAR - Filereader class
{
    DESCRIPTION
        Provides methods to read a file, skip lines, find a line
        and so on.
       
    VARS
        ydFileHandle - $_s = null
            Use embeded ydFileHandle class. 
    [...]

METHOD YD_File_FileReader - Open file	    
{
    DESCRIPTION
	Open the file with the given filename.

    ARGUMENTS
        string - $filename
            Name of the file to open.
    [...]

    SOURCE
        $this->_s =& new YD_File_FileHandle($filename, 'rb');

Dokumentation doppelt

Nachteil ist dabei, dass es mit Methoden wie read() und isEOF() doch einige gibt, die die beiden Klassen gemeinsam haben. Weshalb für diese Methoden dieselbe Dokumentation in beiden Klassen vorhanden ist und daher auch jedesmal beide aktualsiert werden müssen. Eine sehr fehleranfällige Sache. In PHP 5 könnte man auf Interfaces zurückgreifen. Da diese Klassen aber für PHP 4 und PHP 5 gedacht sind müsste das dann mit dem Präprocessor gelöst werden, um nicht immer wieder doppeltes drin zu haben.

[Direktlink]

< Voriger Tag   Nächster Tag >

  RSS V0.91

<Oktober 2005 >
     0102
03040506070809
10111213141516
17181920212223
24252627282930
31      

Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 17-Oct-2005
(C) 2000-2018 by Sven Drieling