Webstatt.org - Community seit 2006 - 2012 (2024?)

Überladung: __get

user-343
12.04.2007 14: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'zwinkern {

$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)

Edit: Hat sich erledigt!

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

Avatar user-253
13.04.2007 18: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. user-158n gibt es leider einen Fehler aufgrund der fehlenden Rechte.