echo $begrüßung;
ich wollte mir gerne die vordefinierte Klasse Directory erweitern. (PHP 4.4.0)
Wenn ich mir davon nun aber eine neue Instanz erzeuge [1], und versuche die show()-Methode aufzurufen, bekomme ich die folgenden Notices/Warnings:
Es wundert mich etwas, von dir diese Fehlermeldungen zu sehen zu bekommen, statt einer print_r- oder var_dump-Ausgabe der betroffenen Variablen, aber gut ... :-)
Ich hätte eigentlich erwartet, dass die Deklaration meiner Klasse myDir mittels extends wie beim Erweitern einer "eigenen" Klasse auch die Eigenschaften und Methoden von Directory erbt - dem scheint aber wohl nicht so zu sein.
Doch doch, sie erbt. Es werden aber nur Klassen-Variablen geerbt. Variablen, die erst zur Laufzeit hinzukommen, also Objektvariablen, werden nicht vererbt.
print_r(get_class_vars('Directory'));
Array
(
)
Wie Sie sehen, sehen Sie nichts. Die Klasse Directory besitzt keine Klassenvariablen.
print_r(get_class_methods('Directory'));
Array
(
[0] => close
[1] => rewind
[2] => read
)
Nun gut, wenigstens sind die Methoden vorhanden.
Mache ich etwas falsch - oder lässt sich die vordefinierte Klasse Directory so einfach nicht benutzen?
Wenn ich den C-Quelltext (ext/standard/dir.c) richtig interpretiere, läuft das Ganze so ab: dir() ist nur eine Funktion, die ein Objekt der Klasse Directory zurückgibt. Dazu wird zunächst opendir() aufgerufen, dem das übergebene Argument directory durchgereicht wird. Dann wird eine Instanz von Directory angelegt, welche um die Objektvariablen path (=directory) und handle (=Rückgabe von opendir()) erweitert wird.
Klar, ich könnte mir noch einen Konstruktor dazubasteln:
Mein Vorschlag: Erstelle dir die MyDir-Klasse aber erbe nicht von Directory. Im Konstruktor verwendest du opendir(), um das Handle zu ermitteln. Und die drei Methoden close, rewind und read kannst du dir als (Fast-)Einzeiler mit closedir(), rewinddir(), readdir() nachbauen.
echo "$verabschiedung $name";