Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der PHP-Referenzdefinition und der Verwendung von Referenzübergabeparameterinstanzen

Detaillierte Erläuterung der PHP-Referenzdefinition und der Verwendung von Referenzübergabeparameterinstanzen

伊谢尔伦
伊谢尔伦Original
2017-07-17 16:52:572816Durchsuche

Übergabe per Referenz

Sie können eine Variable per Referenz an eine Funktion übergeben, damit die Funktion den Wert ihres Parameters ändern kann. Die Syntax lautet wie folgt:

<?php
function foo(&$var)
{
    $var++;
}
$a=5;
foo($a);
// $a is 6 here
?>

Beachten Sie, dass es im Funktionsaufruf keine Referenzsymbole gibt – nur in der Funktionsdefinition. Die Funktionsdefinition allein reicht aus, damit Parameter korrekt per Referenz übergeben werden. Wenn Sie in neueren PHP-Versionen & in foo(&$a); verwenden, erhalten Sie eine Warnung, dass „Call-time pass-by-reference“ veraltet ist.

Folgendes kann als Referenz übergeben werden:

Variablen wie foo($a)
Neue Anweisungen wie foo(new foobar())
Von zurückgegebene Referenzen Funktionen, zum Beispiel:

<?php
function &bar()
{
    $a = 5;
    return $a;
}
foo(bar());
?>

Detaillierte Erläuterungen finden Sie unter Referenzrückgabe.
Jeder andere Ausdruck kann nicht als Referenz übergeben werden und das Ergebnis ist undefiniert. Das folgende Beispiel für die Referenzübergabe ist beispielsweise ungültig:

<?php
function bar() // Note the missing &
{
    $a = 5;
    return $a;
}
foo(bar()); // 自 PHP 5.0.5 起导致致命错误
foo($a = 5) // 表达式,不是变量
foo(5) // 导致致命错误
?>

Diese Bedingungen sind in PHP 4.0.4 und späteren Versionen verfügbar.

Referenzrückgabe
Referenzrückgabe wird verwendet, wenn Sie mithilfe einer Funktion herausfinden möchten, an welche Variable die Referenz gebunden werden soll. Verwenden Sie keine Rückgabereferenzen, um die Leistung zu steigern. Die Engine ist intelligent genug, um sie selbst zu optimieren. Geben Sie Referenzen nur zurück, wenn ein triftiger technischer Grund vorliegt! Um eine Referenz zurückzugeben, verwenden Sie diese Syntax:

<?php
class foo {
    public $value = 42;
    public function &getValue() {
        return $this->value;
    }
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;                // prints the new value of $obj->value, i.e. 2.
?>

In diesem Beispiel wird den Eigenschaften des von der getValue-Funktion zurückgegebenen Objekts ein Wert zugewiesen und nicht kopiert, so als ob die Referenzsyntax nicht verwendet worden wäre .

Hinweis: Im Gegensatz zur Parameterübergabe muss hier das kaufmännische Und-Zeichen an beiden Stellen verwendet werden – was anzeigt, dass eine Referenz zurückgegeben wird, nicht die übliche Kopie, und auch anzeigt, dass $myValue als Referenz gebunden ist, statt wie üblich Abtretung.

Hinweis: Wenn Sie versuchen, eine Referenz von einer Funktion wie dieser zurückzugeben: return ($this->value);, funktioniert dies nicht, da Sie versuchen, das Ergebnis eines Ausdrucks und nicht eines zurückzugeben referenzierte Variable. Sie können Referenzvariablen nur von Funktionen zurückgeben, eine andere Möglichkeit gibt es nicht. Wenn Code versucht, das Ergebnis eines dynamischen Ausdrucks oder des neuen Operators zurückzugeben, wird ab PHP 4.4.0 und PHP 5.1.0 ein E_NOTICE-Fehler ausgegeben.

<?php
function &test(){ 
    static $b=0;//申明一个静态变量 
    $b=$b+1; 
    echo $b; 
    return $b; 
}
$a=test();//这条语句会输出$b的值为1 
$a=5; $a=test();//这条语句会输出$b的值为2
$a=&test();//这条语句会输出$b的值为3 
$a=5; $a=test();//这条语句会输出$b的值为6
?>

Der Aufruf einer Funktion mit $a=test() weist nur $a den Wert der Funktion zu, und alle Änderungen an $a wirken sich nicht auf $b in der Funktion aus $a=&test(), seine Funktion besteht darin, die Speicheradresse der $b-Variablen im Rückgabewert $b und die Speicheradresse der $a-Variablen auf dieselbe Stelle zu verweisen, was das Äquivalent dieses Effekts erzeugt ( $a=&b ;) Wenn man also den Wert von $a ändert, ändert sich auch der Wert von $b, sodass nach der Ausführung von $a=&test(); der Wert von $b zu 5 wird.

PHP übergibt Parameter durch Referenzverwendung

<?php
function add_some_extra(&$string) // 引入变量,使用同一个存储地址
{
  $string .= &#39;and something extra.&#39;;
}
$str = &#39;This is a string, &#39;;
add_some_extra($str);
echo $str;  // outputs &#39;This is a string, and something extra.&#39;
?>

Ausgabe:

This is a string, and something extra.

Ohne das kaufmännische Und

<?php
function add_some_extra($string)
{
  $string .= &#39;and something extra.&#39;;
}
$str = &#39;This is a string, &#39;;
add_some_extra($str);
echo $str;  // outputs &#39;This is a string, &#39;
?>

Ausgabe:

This is a string,

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der PHP-Referenzdefinition und der Verwendung von Referenzübergabeparameterinstanzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn