Willkommen in der Webstatt
User-1 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?
User-2 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. xyz-48n 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