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

伊谢尔伦
Freigeben: 2023-03-14 10:14:01
Original
2895 Leute haben es durchsucht

Ü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
?>
Nach dem Login kopieren

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());
?>
Nach dem Login kopieren

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) // 导致致命错误
?>
Nach dem Login kopieren

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.
?>
Nach dem Login kopieren

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
?>
Nach dem Login kopieren

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;
?>
Nach dem Login kopieren

Ausgabe:

This is a string, and something extra.
Nach dem Login kopieren

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;
?>
Nach dem Login kopieren

Ausgabe:

This is a string,
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage