Willkommen in der Webstatt Zum Webstatt Blog und Stories
Wasili am 12.04.07 16:47

final class ModuleManager {
public $dirhandle = NULL; # <=== Mit dem wird __get für diese Variable nie aufgerufen!

const MODULEDIR = 'modules/';
const MODULEEXT = '.mod.php';

public function __get($nm) {
print 'Call _get !';
if($nm == 'dirhandle') {

$this->dirhandle = dir(self::MODULEDIR);
return $this->dirhandle;
}
}

public function CountAllModules() {
$i = 0;
var_dump($this);
$this->dirhandle->rewind();
while (false !== ($entry = $this->dirhandle->read())) {
if(substr($entry, 0, -(count(self::MODULEEXT))) == self::MODULEEXT AND is_file($entry)) {
$i++;
}
}
return $i;
}
}


Rufe ich nun die Methode CountAllModules auf, die wiederum auf die Variable "dirhandle" zugreift, so wird die Funktion __get nicht aufgerufen. Auch wenn ich den Aufruf ausserhalb des Objektes mache: __get will von allem nichts wissen.

Weiss wer warum?

Edit: Die im PHP-Manual stehende Klasse "Setter" gibt die gleiche Ausgabe bei mir. Und natürlich hab ich PHP5 (5.2.0 oder so)

[COLOR=red]Edit: Hat sich erledigt! [/COLOR]

Der Fehler lag im setzen von "dirhandle" auf NULL im Kopf des Objektes. Autsch.

netcup.de Warum gibt es hier Werbung?
Michael Michael am 13.04.07 20:02

Hey!

Auch wenn es sich mittlerweile erledigt noch einmal zur Klarstellung:

Die Methode __get wird immer dann aufgerufen, wenn es die angeforderte Variable NICHT gibt. Insbesondere wird sie nicht aufgerufen, wenn es eine protected oder private Variable mit diesem Bezeichner gibt. Dann gibt es leider einen Fehler aufgrund der fehlenden Rechte.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt