Ich wollte mir gerne die vordefinierte Klasse Directory erweitern. (PHP 4.4.0)
Einfaches Beispiel:
Wenn ich mir davon nun aber eine neue Instanz erzeuge, und versuche die show()-Methode aufzurufen, bekomme ich die folgenden Notices/Warnings:
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.
Am Anfang meiner eigenen Klasse
einzufügen, bringt natürlich auch nichts - die Notices bzgl. der undefined properties verschwinden zwar, aber:
path und handle bekommen so beim Erzeugen der Objektinstanz auch keine Werte zugewiesen.
Mache ich etwas falsch - oder lässt sich die vordefinierte Klasse Directory so einfach nicht benutzen?
Klar, ich könnte mir noch einen Konstruktor dazubasteln:
Damit würde es funktionieren ... aber das erscheint mir doch arg unsauber bis blödsinnig: Wenn ich im Konstruktor von myDir nochmal dir aufrufe - dann hätte ich es mir gleich sparen können, myDir von dir abzuleiten, und hätte es gleich prozedural programmieren können.
Einfaches Beispiel:
PHP-Code:
class myDir extends Directory {
function show() {
echo $this->path."<br>\n";
echo $this->handle."<br>\n";
echo $this->read()."<br>\n";
$this->close();
}
}
Code:
Notice: Undefined property: path in ... on line 10 Notice: Undefined property: handle in ... on line 11 Warning: read(): Unable to find my handle property in ... on line 12 Warning: close(): Unable to find my handle property in ... on line 13
Am Anfang meiner eigenen Klasse
PHP-Code:
var $path, $handle;
Code:
Warning: read(): supplied argument is not a valid Directory resource in ... on line 12 Warning: close(): supplied argument is not a valid Directory resource in ... on line 13
Mache ich etwas falsch - oder lässt sich die vordefinierte Klasse Directory so einfach nicht benutzen?
Klar, ich könnte mir noch einen Konstruktor dazubasteln:
PHP-Code:
function myDir($path) {
echo "im konstruktor!<br>\n";
$x = dir($path);
$this->path = $x->path;
$this->handle = $x->handle;
unset($x);
}
Kommentar