dedlfix: HTTP-Cache

Beitrag lesen

echo $begrüßung;

Zu dieser Software hätte ich jetzt gerne Kritik :-)

$foo = new HTTPCache;
$inhalt = $foo->get('http://example.org/');

Wenn get() die einzige öffentliche Methode ist, wäre es für den Anwender einfacher, diese statisch aufrufen zu können, statt sich eine Instanz, die man nicht weiter braucht, in seinen Variablenraum zu holen. (Um nicht bei mehrfachen Aufrufen jedes Mal ein neues Objekt zu erzeugen, kannst du dich ja intern des Singleton-Musters bedienen.) Du verwendest auch keinen Konstruktor, für dessen Aufruf eine Instantiierung nötig wäre.

if (basename($_SERVER['PHP_SELF']) == 'HTTPCache.class.php') {
highlight_file('HTTPCache.class.php');

Oft haben Webserver eine Standardeinstellung, die beim Enden von Dateinamen auf .phps das macht, was du damit nachbildest. Ein Symlink auf die .php-Datei ist dafür ausreichend (falls das Verfolgen von Symlinks nicht konfigurativ unterbunden wurde).

Die Klasse HTTPCacheDB ist im Prinzip allein nicht lebensfähig. Sie verwendet Klassenvariablen (z.B. $this->open), die aber erst in der abgeleiteten Klasse HTTPCache definiert werden. Für PHP ist das zwar kein großes Problem - es erzeugt sie sich einfach, wenn es sie nicht gibt - aber guter Stil ist das nicht. "Die Kinder versorgen die Eltern" ist nicht im Sinne des OOP-Konzepts. Besser ist es, eine Basisklasse zu erstellen, die alle Eigenschaften und Methoden enthält, die grundsätzlich vorhanden sein sollen, auch wenn diese nur abstrakt sind und in erbenden Klassen überschrieben werden müssen. Ich habe den Eindruck, dass du HTTPCacheDB nur zum Auslagern von Code verwendest, damit die Hauptklasse nicht zu groß wird. Das ist ... ähm ... unüblich. Eine Klasse sollte nach außen hin ein abgeschlossenes Gebilde sein, so dass man sie auch eigenständig woanders verwenden kann.

Du setzt mit der Verwendung von file_put_contents() PHP5 voraus, wendest aber dessen neue Visibility-Möglichkeiten bei der Verwendung von Klassen nicht an (public, private, protected für Methoden und statt var). (Das ist nur eine Feststellung meinerseits, kein kriegsentscheidender Fehler.)

Du verwendest trigger_error() in HTTPCacheDB. Soweit nicht schlecht. Das hat nur den Nachteil, dass man die Ausgabe von Meldungen irgendwie ausschalten muss, wenn man deine Klassen einsetzt. Ein besseres Konzept wären Exceptions. Die erzeugen immer noch eine Meldung, jedoch nur, wenn man sie nicht abfängt, was man aber im Gegensatz zu einem irgendwohin ausgegebenen Fehlermeldungsstring einfacher machen und auswerten kann.

Die Methode open() in HTTPCacheDB liefert zwar einen Erfolgsstatus, doch der wird in HTTPCache ignoriert. Bei add|read|update|writeResource() ist das auch so.

Soweit die Dinge, die mir beim Drüberschauen aufgefallen sind. Inhaltlich habe ich nicht geprüft.

echo "$verabschiedung $name";