<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.variables.scope.php',
    1 => 'Geltungsbereich von Variablen',
    2 => 'Geltungsbereich von Variablen',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Variablen',
  ),
  'prev' => 
  array (
    0 => 'language.variables.predefined.php',
    1 => 'Vordefinierte Variablen',
  ),
  'next' => 
  array (
    0 => 'language.variables.variable.php',
    1 => 'Variable Variablen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.scope" class="sect1">
   <h2 class="title">Geltungsbereich von Variablen</h2>

   <p class="simpara">
    Der Geltungsbereich einer Variablen ergibt sich aus dem Zusammenhang, in
    dem sie definiert wurde.
    PHP hat einen Funktionsbereich und einen globalen Bereich.
    Jede Variable, die außerhalb einer Funktion definiert wird, ist auf den
    globalen Bereich beschränkt. Wenn eine Datei eingebunden wird, erbt der
    darin enthaltene Code den Variablenbereich der Zeile, in der die Einbindung
    erfolgt.
   </p>
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Beispiel für den Geltungsbereich globaler Variablen</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'b.inc'</span><span style="color: #007700">; </span><span style="color: #FF8000">// Die Variable $a wird in b.inc verfügbar sein<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    Jede Variable, die innerhalb einer benannten Funktion oder einer
    <a href="functions.anonymous.php" class="link">anonymen</a> Funktion erstellt
    wird, ist auf den Bereich des Funktionskörpers beschränkt.
    Im Gegensatz dazu binden
    <a href="functions.arrow.php" class="link">Pfeilfunktionen</a> Variablen aus dem
    übergeordneten Bereich, um sie im Körper verfügbar zu machen.
    Wenn eine Datei innerhalb einer Funktion der aufrufenden Datei eingebunden
    wird, sind die in der aufgerufenen Datei enthaltenen Variablen so
    verfügbar, als wären sie innerhalb der aufrufenden Funktion definiert
    worden.
   </p>

   <div class="example" id="example-2">
    <p><strong>Beispiel #2 Beispiel für den Geltungsbereich lokaler Variablen</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// globaler Geltungsbereich<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />    echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">; </span><span style="color: #FF8000">// Die Variable $a ist undefiniert, da sie sich auf eine lokale<br />             // Version von $a bezieht<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    Das obige Beispiel erzeugt ein <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> wegen einer
    undefinierten Variable (oder ein E_NOTICE vor PHP 8.0.0). Das liegt daran,
    dass sich die echo-Anweisung auf eine lokale Variable namens
    <var class="varname">$a</var> bezieht, und dieser kein Wert im lokalen
    Geltungsbereich zugewiesen wurde. Es ist zu beachten, dass sich dies etwas
    von C unterscheidet, da in C globale Variablen automatisch für Funktionen
    zur Verfügung stehen, es sei denn, sie werden durch eine funktionsinterne
    Definition überschrieben. Dies kann zu Problemen führen, da eine globale
    Variable versehentlich geändert werden kann. In PHP müssen globale
    Variablen innerhalb einer Funktionen deklariert werden, wenn sie in dieser
    Funktion verwendet werden sollen.
   </p>

   <div class="sect2" id="language.variables.scope.global">
    <h3 class="title">Das Schlüsselwort <code class="literal">global</code></h3>
    <p class="simpara">
     Das Schlüsselwort <code class="literal">global</code> wird verwendet, um eine
     Variable aus einem globalen Bereich in einen lokalen Bereich zu binden.
     Das Schlüsselwort kann mit einer Liste von Variablen oder einer einzelnen
     Variablen verwendet werden. Es wird eine lokale Variable erstellt, die auf
     die gleichnamige globale Variable verweist. Wenn die globale Variable
     nicht existiert, wird sie im globalen Bereich erstellt und erhält den Wert
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Beispiel #3 Verwendung von <code class="literal">global</code></strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">Sum</span><span style="color: #007700">()<br />{<br />    global </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /><br />    </span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">Sum</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3
</pre></div>
      </div>
     </div>
    </p>

   <p class="simpara">
    Durch das Deklarieren der Variablen <var class="varname">$a</var> und
    <var class="varname">$b</var> innerhalb der Funktion als global weisen alle
    Referenzen zu beiden Variablen auf die nun globalen Werte. Es gibt keine
    Beschränkungen bei der Anzahl an globalen Variablen, die durch eine
    Funktion verändert werden können.
   </p>

   <p class="simpara">
    Eine weitere Möglichkeit, auf Variablen aus dem globalen Bereich
    zuzugreifen, besteht in der Verwendung des speziellen, von PHP definierten
    Arrays <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var>. Das obige Beispiel kann damit auch so
    geschrieben werden:
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Beispiel #4 Verwendung von <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> statt global</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">Sum</span><span style="color: #007700">()<br />{<br />    </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">] = </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">'a'</span><span style="color: #007700">] + </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">];<br />}<br /><br /></span><span style="color: #0000BB">Sum</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="simpara">
    Das <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var>-Array ist ein assoziatives Array mit dem
    Namen der globalen Variablen als Schlüssel und dem Inhalt dieser Variablen
    als Wert des Array-Elements. Beachten Sie, dass
    <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> in jedem Geltungsbereich existiert, weil
    <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> eine
    <a href="language.variables.superglobals.php" class="link">Superglobale</a> ist.
    Hier ist ein Beispiel, das die Stärke von Superglobalen verdeutlicht:
   </p>
   <p class="para">
    <div class="example" id="example-5">
     <p><strong>Beispiel #5 Beispiel zur Demonstration von Superglobalen und Geltungsbereich</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test_superglobal</span><span style="color: #007700">()<br />{<br />    echo </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Die Verwendung des Schlüsselworts <code class="literal">global</code> außerhalb
     einer Funktion ist kein Fehler. Es kann verwendet werden, wenn die Datei
     innerhalb einer Funktion eingebunden wird.
    </span>
   </p></blockquote>
  </div>

  <div class="sect2" id="language.variables.scope.static">
   <h3 class="title">Die Verwendung von <code class="literal">static</code> Variablen</h3>
   <p class="simpara">
    Ein weiterer wichtiger Anwendungszweck von Variablen-Bereichen ist die
    <em>statische</em> Variable. Eine statische Variable existiert
    nur in einem lokalen Funktions-Geltungsbereich, der Wert geht beim
    Verlassen dieses Bereichs aber nicht verloren. Schauen Sie das folgende
    Beispiel an:
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Beispiel #6 Beispiel, das die Notwendigkeit von statischen Variablen demonstriert</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$a</span><span style="color: #007700">++;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Diese Funktion ist sinnlos, da sie bei jedem Aufruf <var class="varname">$a</var>
    auf <code class="literal">0</code> setzt und <code class="literal">0</code> ausgibt. Die
    Anweisung <var class="varname">$a</var>++, welche den Wert erhöht, erfüllt keinen
    Zweck, da der Wert von <var class="varname">$a</var> beim Verlassen der Funktion
    verloren geht. Um eine sinnvolle Zählfunktion zu implementieren, die ihren
    aktuell gesetzten Wert nicht vergisst, müssen Sie die Variable
    <var class="varname">$a</var> als statisch deklarieren:
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Beispiel #7 Beispiel zur Verwendung statischer Variablen</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$a</span><span style="color: #007700">++;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Nun wird <var class="varname">$a</var> nur beim ersten Aufruf der Funktion
    initialisiert, und jedes mal wenn die Funktion <code class="literal">test()</code>
    aufgerufen wird, wird sie den Wert von <var class="varname">$a</var> ausgeben und
    den Variablenwert erhöhen.
   </p>

   <p class="simpara">
    Statische Variablen ermöglichen auch einen Weg zum Umgang mit rekursiven
    Funktionen. Die folgende einfache Funktion zählt rekursiv bis 10. Die
    statische Variable <var class="varname">$count</var> wird verwendet, um die
    Rekursion zu beenden:
   </p>
   <p class="para">
    <div class="example" id="example-8">
     <p><strong>Beispiel #8 Statische Variablen in rekursiven Funktionen</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$count </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /><br />    </span><span style="color: #0000BB">$count</span><span style="color: #007700">++;<br />    echo </span><span style="color: #0000BB">$count</span><span style="color: #007700">;<br />    if (</span><span style="color: #0000BB">$count </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">10</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br />    }<br />    </span><span style="color: #0000BB">$count</span><span style="color: #007700">--;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Vor PHP 8.3.0 konnten statische Variablen nur mit einem konstanten Ausdruck
    initialisiert werden. Seit PHP 8.3.0 sind auch dynamische Ausdrücke (z. B.
    Funktionsaufrufe) erlaubt:
   </p>
   <p class="para">
    <div class="example" id="example-9">
     <p><strong>Beispiel #9 Statische Variablen deklarieren</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(){<br />    static </span><span style="color: #0000BB">$int </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;          </span><span style="color: #FF8000">// korrekt<br />    </span><span style="color: #007700">static </span><span style="color: #0000BB">$int </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">+</span><span style="color: #0000BB">2</span><span style="color: #007700">;        </span><span style="color: #FF8000">// korrekt<br />    </span><span style="color: #007700">static </span><span style="color: #0000BB">$int </span><span style="color: #007700">= </span><span style="color: #0000BB">sqrt</span><span style="color: #007700">(</span><span style="color: #0000BB">121</span><span style="color: #007700">);  </span><span style="color: #FF8000">// korrekt seit PHP 8.3.0<br /><br />    </span><span style="color: #0000BB">$int</span><span style="color: #007700">++;<br />    echo </span><span style="color: #0000BB">$int</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="simpara">
    Statische Variablen innerhalb anonymer Funktionen bleiben nur innerhalb der
    jeweiligen Funktionsinstanz bestehen. Wenn die anonyme Funktion bei jedem
    Aufruf neu erstellt wird, wird die statische Variable neu initialisiert.
   </p>
   <div class="example" id="example-10">
    <p><strong>Beispiel #10 Statische Variablen in anonymen Funktionen</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">exampleFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$result </span><span style="color: #007700">= (static function () use (</span><span style="color: #0000BB">$input</span><span style="color: #007700">) {<br />        static </span><span style="color: #0000BB">$counter </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$counter</span><span style="color: #007700">++;<br />        return </span><span style="color: #DD0000">"Eingabe: </span><span style="color: #0000BB">$input</span><span style="color: #DD0000">, Zähler: </span><span style="color: #0000BB">$counter</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    });<br /><br />    return </span><span style="color: #0000BB">$result</span><span style="color: #007700">();<br />}<br /><br /></span><span style="color: #FF8000">// Bei Aufrufen von exampleFunction wird die anonyme Funktion neu erstellt,<br />// so dass die statische Variable ihren Wert nicht beibehält.<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">exampleFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">'A'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Ausgabe: Eingabe: A, Zähler: 1<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">exampleFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">'B'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Ausgabe: Eingabe: B, Zähler: 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Wenn eine Methode, die statische Variablen verwendet, vererbt (aber nicht
    überschrieben) wird, teilt die vererbte Methode seit PHP 8.1.0 die
    statischen Variablen mit der Elternmethode. Das bedeutet, dass sich
    statische Variablen in Methoden nun genauso verhalten wie statische
    Eigenschaften.
   </p>

   <p class="simpara">
    Seit PHP 8.3.0 können statische Variablen mit beliebigen Ausdrücken
    initialisiert werden.
    Das bedeutet, dass z. B. Methodenaufrufe verwendet werden können, um
    statische Variablen zu initialisieren.
   </p>

   <div class="example" id="example-11">
    <p><strong>Beispiel #11 Verwendung statischer Variablen in geerbten Methoden</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{<br />    public static function </span><span style="color: #0000BB">counter</span><span style="color: #007700">() {<br />        static </span><span style="color: #0000BB">$counter </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$counter</span><span style="color: #007700">++;<br />        return </span><span style="color: #0000BB">$counter</span><span style="color: #007700">;<br />    }<br />}<br />class </span><span style="color: #0000BB">Bar </span><span style="color: #007700">extends </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(1)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(2)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Bar</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(3), vor PHP 8.1.0 int(1)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Bar</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(4), vor PHP 8.1.0 int(2)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.variables.scope.references">
   <h3 class="title">Referenzen bei <code class="literal">global</code> und <code class="literal">static</code> Variablen</h3>
   <p class="simpara">
    PHP implementiert die Modifikatoren
    <a href="language.variables.scope.php#language.variables.scope.static" class="link">static</a> und
    <a href="language.variables.scope.php#language.variables.scope.global" class="link">global</a> für
    Variablen als
    <a href="language.references.php" class="link">Referenzen</a>. Zum Beispiel
    erzeugt eine echte globale Variable, die mit der Anweisung
    <code class="literal">global</code> in den Funktions-Geltungsbereich importiert
    wurde, tatsächlich eine Referenz zur globalen Variable. Das kann zu einem
    unerwarteten Verhalten führen, auf das im folgenden Beispiel eingegangen
    wird:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test_global_ref</span><span style="color: #007700">() {<br />    global </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">test_global_noref</span><span style="color: #007700">() {<br />    global </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= </span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">test_global_ref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">test_global_noref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
NULL
object(stdClass)#1 (0) {
}
</pre></div>
   </div>

   <p class="simpara">
    Ein ähnliches Verhalten gilt auch für die Anweisung
    <code class="literal">static</code>. Referenzen werden nicht statisch gespeichert:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function &amp;</span><span style="color: #0000BB">get_instance_ref</span><span style="color: #007700">() {<br />    static </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br /><br />    echo </span><span style="color: #DD0000">'Statisches Objekt: '</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />        </span><span style="color: #FF8000">// Der statischen Variablen eine Referenz zuweisen<br />        </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />    }<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    } else {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">++;<br />    }<br />    return </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />}<br /><br />function &amp;</span><span style="color: #0000BB">get_instance_noref</span><span style="color: #007700">() {<br />    static </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br /><br />    echo </span><span style="color: #DD0000">'Statisches Objekt: '</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />        </span><span style="color: #FF8000">// Der statischen Variablen ein Objekt zuweisen<br />        </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= </span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />    }<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    } else {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">++;<br />    }<br />    return </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$obj1 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_ref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$still_obj1 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_ref</span><span style="color: #007700">();<br />echo </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$obj2 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_noref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$still_obj2 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_noref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <p class="para">Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Statisches Objekt: NULL
Statisches Objekt: NULL

Statisches Objekt: NULL
Statisches Objekt: object(stdClass)#3 (1) {
  [&quot;property&quot;]=&gt;
  int(1)
}
</pre></div>
   </div>

   <p class="simpara">
    Dieses Beispiel demonstriert, dass die Referenz, die einer statischen
    Variablen zugewiesen wird, beim zweiten Aufruf der Funktion
    <code class="literal">&amp;get_instance_ref()</code> <em>vergessen</em>
    ist.
   </p>
   </div>
  </div><?php manual_footer($setup); ?>