quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2003/08/21 10:41:31

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Referenzen

  1. Was sind Referenzen
  2. Referenzen erstellen bzw. benutzen
  3. Verwendungszweck

1. Was sind Referenzen

Mit Referenzen kann man mehrere Variablen so verändern, dass sie auf den selben Inhalt zeigen. Diesen Inhalt kann ich dann mit all diesen Variablen ansprechen.

<?php
    
/*
     * Referenzen mit $a, $b und $c erstellt. Zieh zeigen nun alle auf den
     * gleichen Inhalt. Man kann es sich so vorstellen, als ob sie alle auf die
     * gleiche Speicherzelle für, z.B., einer Integerzahl zeigt
     */

    
echo $a."-".$b."-".$c."-".$d."<br />\n";
    
$a++;
    echo
$a."-".$b."-".$c."-".$d."<br />\n";
    
$b++;
    echo
$a."-".$b."-".$c."-".$d."<br />\n";
>

Dies gibt nun folgendes aus (bei einem Startwert von 10)

10-10-10
11-11-11
12-12-12
        

Alle Variablen zeigen auf den gleichen Inhalt. Das nennt man dann eine Referenz.

2. Referenzen erstellen bzw. benutzen

Um Referenzen zu erstellen muss man bei der Zuweisung das & benutzen. Hier ein Beispiel.

<?php
    $a
= 10;
    
$b =& $a;
?>

Hier wird ganz normal zuerst einer Variable einen Wert zugewiesen. Dann werden die Variablen miteinander Verknüpft. Die beiden Variablen zeigen nun auf den gleichen Inhalt. Dabei ist es wichtig, auf welcher Seite welche Variable steht. Hier wird z.B. die Variable $b angepasst, also der vorherige Inhalt von Variable $b ist nun weg.

Man kann auch den Rückgabewert von Funktion referenzieren, wenn dies Sinn macht.

<?php
    
function &getConfig()
    {
        
// Datei-Funktionen, um
        // eine Konfigurationsdatei
        // auszulesen
        
static $array = array();
        
// hier sind nun alle wichtigen
        // infos drin.
        
return $array;
    }

    
$a =& getConfig();
    
$a['ini'] = "php.ini";

    
// ganz woanders

    
print_r(getConfig());
?>

Wenn eine Funktion eine Referenz 'zurückliefern' werden soll, dann muss man im Funktionskopf ein & vor dem Funktionsnamen schreiben. Das static dient dazu, dass die Variable nach dem Verlassen der Funktion immer noch in der Funktion vorhanden ist. Siehe die Infopage zu static.

Man kann auch eine Referenz als Parameter für eine Funktion übergeben. Normalerweise wird ein Parameter dann kopiert.

<?php
    
function foo($var)
    {
        
$var++;
        echo
$var."<br />\n";
    }
    
$a = 5;
    
foo($a);
    echo
$a."<br />\n";
?>

Dieser Programmteil gibt einmal die Zahl 6 und dann wieder die Zahl 5 aus, wie man es kennt. Man kann das Script aber wie folgt umschreiben.

<?php
    
//           |
    //           V
    
function foo(&$var)
    {
        
$var++;
        echo
$var."<br />\n";
    }
    
$a = 5;
    
foo($a);
    echo
$a."<br />\n";
?>

'Andersrum' geht auch.

<?php
    
function &foo($var)
    {
        
$var++;
        echo
$var."<br />\n";
    }
    
$a = 5;
    
//  |
    //  V
    
foo(&$a);
    echo
$a."<br />\n";
?>

Dabei ist es egal, welche Variable man wie mit der anderen Variable verknüpft. Doch man schreibt das Und-Zeichen üblicherweise im Funktionskopf hin, statt ein Und-Zeichen bei jedem Funktionsaufruf. In den neueren PHP-Versionen wird es als deprecated angesehen, Referenzen beim Funktionsaufruf zu übergeben. Deswegen sollte man eine Referenz nur im Funktionskopf definieren.

Jetzt wird zwei mal die Zahl 6 ausgegeben. Denn durch das $var++ wird auch die Variable $a++ außerhalb der Funktion verändert. Die Funktion sort arbeitet z.B. so.

3. Verwendungszweck

Nehmen wir an, ich suche ein Objekt xy mit einer Funktion. wie die kriteriern auch immer aussehen. Die Funktion sieht erstmal so aus.

<?php
    
function searchObj()
    {
    }
?>

Nun haben wir unser gesuchtes Objekt gefunden. Dieses geben wir mit return zurück.

<?php
    
function searchObj()
    {
        
/*
            suchen
        */
        
return $obj;
    }
?>

Und nun rufen wir diese Funktion auf.

<?php
    
function searchObj()
    {
        
/*
            suchen
        */
        
return $obj;
    }

    
$foo = searchObj();
    
$foo->machwas();
?>

Doch hier haben wir einen Fehler gemacht. In $foo ist jetzt eine Kopie vom gesuchten Objekt. Ich wollte doch das eigentliche Objekt verändert, und nicht eine Kopie. Deshalb muss man mit Referenzen arbeiten. Wir müssen einmal den Funktionskopf bearbeiten und das & in der Zuweisung benutzen (=&).

<?php
    
function &searchObj()
    {
        
/*
            suchen
        */
        
return $obj;
    }

    
$foo =& searchObj();
    
$foo->machwas();
?>

Nun bearbeiten wir auch das Objekt was wir bearbeiten wollen und nicht eine Kopie.

Fragen zum aktuellen Thema

  1. Wie erstellt man Referenzen?
Wie erstellt man Referenzen?

Wenn man eine Variable mit einer anderen Variable referenzieren möchte muss man den Zuweisungsoperator =& benutzen. Dabei wird der Inhalt der rechten Variable auch der Inhalt der linken Variable. Die linke Variable verliert ihren vorherigen Wert und beide Variablen ändern sich gegenseitig beim verändern.

Nach oben