Heim >Backend-Entwicklung >PHP-Tutorial >Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

不言
不言Original
2018-09-08 15:47:562494Durchsuche

Was sind PHP-Referenzvariablen? Wie definiere ich Referenzvariablen? In diesem Artikel werden die grundlegenden Konzepte und Arbeitsmethoden von Referenzvariablen in PHP aus dem Speicherbereich sowie ein allgemeines Beispiel kurz vorgestellt.

Konzept

Was ist eine Referenzvariable? Welche Symbole werden in PHP verwendet, um Referenzvariablen zu definieren?

Verschiedene Namen greifen auf denselben Variableninhalt zu, verwenden & zum Ausdruck bringen.

COW (Copy on Write)

Eine gängige Methode zur Speicheroptimierung. Diese Methode wird auch in PHP zur Speicheroptimierung verwendet.

Kopieren beim Schreiben, d. h. nur wenn eine oder mehrere Variablen geschrieben werden, wird eine Kopie des Speichers kopiert und sein Inhalt wird geändert.

Verwenden Sie „memory_get_usage()“ in PHP, um Speicheränderungen zu beobachten

Demo

Unbenutzt & (Referenzvariable)

        $a = range(0,1000);
        var_dump(memory_get_usage());
        $b = $a;`
        var_dump(memory_get_usage());
        $a = range(0,1000);
        var_dump(memory_get_usage());

Laufergebnisse:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

Es gibt keinen großen Unterschied in der Erinnerung zwischen dem ersten und dem zweiten Mal, aber beim dritten Mal gibt es einen großen Unterschied

Verwenden Sie &

        $a = range(0,1000);
        var_dump(memory_get_usage());
        $b = &$a;
        var_dump(memory_get_usage());
        $a = range(0,1000);
        var_dump(memory_get_usage());

Laufergebnisse:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

bei Verwendung von Referenzpass- Parsing-Analyse nach Wertspeicher:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

$a belegt einen Speicherplatz im Speicher, wenn er zugewiesen wird, und wenn $b=&$a, $b zeigt Wenn sich $a ändert, folgt der von $b belegte Speicherplatz der Änderung von $a

unset

unset() und wird nur dereferenziert und nicht zerstört der Raum

$a=1;
$b=&$a;
unset($b);
echo $a;

Ausgabeergebnis: 1

Speicherplatzanalyse:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

$ a wird $b=& zugewiesen. Nachdem $a, $a und $b direkt in denselben Speicherbereich verschoben wurden ($b), wird die Referenz von $b auf $a aufgehoben, sodass $b nicht mehr darauf zeigt der Speicherplatz von $a

Off topic

Das Objekt selbst wird als Referenz übergeben

class Person
{
    public $name="zhangsan";
}
$p1 =new Person;
xdebug_debug_zval('p1');
$p2 =$p1;
xdebug_debug_zval('p1');
$p2->name="lisi";
xdebug_debug_zval('p1');

Laufende Ergebnisse:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

Ergebnisanalyse:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

Nachdem das Objekt instanziiert und als Referenz übergeben wurde$p1 $p2 zeigt immer auf der gleiche Speicherplatz

Case

     <?php     
     $data = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];
    
     foreach($data as $key => $val)
     {
          $val = &$data[$key];
     }
    var_dump($data);

Write Was ist die Ausgabe des obigen Programms?
Welchen Wert hat die Variable $data nach dem Ende jeder Schleife, wenn das Programm ausgeführt wird?
Welchen Wert hat die Variable $data nach Abschluss der Programmausführung?

Speicheränderungen und -analyse:

Was sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen

Verwandte Empfehlungen:

php-Variablenreferenz und Objektreferenz Detaillierte Einführung_PHP-Tutorial

Detaillierte Einführung in PHP-Variablenreferenzen und Objektreferenzen

Das obige ist der detaillierte Inhalt vonWas sind PHP-Referenzvariablen? Beispielerklärung von PHP-Referenzvariablen. 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