Globale Variablen nicht in Objekt verfügbar

Parantatatam

mag Cookies & Kekse
Hallo,

ich stehe gerade mal am Rande meines Verständnisses und zwar in dem Punkt, dass ich in einem Objekt von mir keine globale Variablen abrufen kann. Anstatt des gewünschten Arrays bekomme ich die Ausgabe *RECURSION*, aber wo ist da bitte eine Rekursion? Denn wenn ich $GLOBALS außerhalb des Objektes aufrufe, dann wird mir auch das angezeigt, was ich mag. Vielleicht liegt es auch am Aufbau meiner Objekte. Hier mal das Wichtigste komprimiert:

Klasse 1:
PHP:
<?php
class Atom {

  public function __get($strKey) {
    $object = new AtomPerson($strKey, $id);
    $this->id = $id;
    return $object;
  }

  public function __destruct() {
    print_r($GLOBALS);
  }
}
?>

Klasse 2:
PHP:
<?php
class AtomPerson {

  public function __construct($saveAs, &$id) {
    $this->id = $id;
  }

  public function name($name) {
    $this->save('name', $name);
    return $this;
  }

  public function save($key, $value) {
    $GLOBALS['_OBJECTS'][$key] = $value;
  }
}
?>
 
Die Rekursion bezieht sich nicht auf deine Objekte oder Klassen, sondern viel mehr auf das GLOBALS Array.

GLOBALS enthält jede Variable, also auch sich selbst, was wiederrum bedeutet das, wenn du beim GLOBALS key ankommst, er das Array noch mal ausgeben müsste usw. usw. usw.

So in etwa kannst du dir das vorstellen:
PHP:
$GLOBALS = Array ( "GLOBALS" => Array ( "GLOBALS" => Array ( .........

PHP lässt das halt nicht zu und wirft dir einfach ein RECURSION an den Kopf.
 
Das mit der Rekursion hat sich jetzt für mich geklärt und wie sich gezeigt hat, kann ich mir den Inhalt wirklich mit var_dump() anzeigen lassen. Nur habe ich jetzt das Problem, dass ich nur $GLOBALS['_OBJECTS'] aufrufen will, aber durch die Rekursion sich $GLOBALS immer wieder selbst aufruft und am Ende das Skript abbricht, was ich natürlich nicht haben will. Wie kann man das umgehen?

EDIT: Okay, das Problem hat sich gelöst. Ich musste einfach direkt die Variable $_OBJECTS aufrufen, welche ich in meiner Methode vorher nochmals mit global als globale Variable gekennzeichnet habe. Danke euch beiden.
 
Zuletzt bearbeitet:
Zurück