Inhaltsverzeichnis
php引用计数与变量引用
Heim Backend-Entwicklung PHP-Tutorial php引用计数与变量引用_PHP教程

php引用计数与变量引用_PHP教程

Jul 12, 2016 am 09:08 AM
变量

php引用计数与变量引用

 每个php5.5变量都存储在一个叫做zval的变量容器中。
 
  一个zval变量容器,除了包含变量的类型与值外,还包含两个字节的额外信息:
 
    1、第一个是“is_ref”,是个bool型,用来标识这个变量是否属于引用集合(reference set),若属于则其值为1,否则为0。
 
      有个这个变量php引擎就能够将普通变量与引用变量区分开来。
 
    2、第二个是“refcount”,用来表示指向这个zval变量(符号)的个数。每个符号都有作用域(scope),那些主脚本和函数或者方法也都有作用域。
 
      所有的符号都存在一个符号表中。
 
  当一个变量被赋值一个常量值时,就会生成一个zval变量容器,如下例:
 
    $a = "Hello world";
?>
  这个时候执行以下程序得到$a变量指向zval容器中的is_ref与refcount值
 
    $a = "Hello world";
    print_r(xdebug_debug_zval('a'));
?>
a: (refcount=1, is_ref=0)='Hello world'
  下面,我们进行如下实验,来探讨引用赋值与普通赋值。
 
  首先,使$b指向$a,查看is_ref、 refcount,如下:
 
    $a = "Hello world";  
    $b = $a;
    print_r(xdebug_debug_zval('a'));
    print_r(xdebug_debug_zval('b'));
?>
a: (refcount=2, is_ref=0)='Hello world'
b: (refcount=2, is_ref=0)='Hello world'
  让$b引用$a,查看is_ref    refcount,如下
 
    $a = "Hello world";  
    $b = &$a;
    print_r(xdebug_debug_zval('a'));
    print_r(xdebug_debug_zval('b'));
?>
a: (refcount=2, is_ref=1)='Hello world'
b: (refcount=2, is_ref=1)='Hello world'
  从上我们可以分析出,当有变量引用相应zval容器时,is_ref为1。
 
  我们进一步分析,我们把$b 引用$a,$c指向$a,如下
 
 
<?php
    $a = "Hello world";  
    $b = &$a;
    $c = $a;

    print_r(xdebug_debug_zval(&#39;a&#39;));
    print_r(xdebug_debug_zval(&#39;b&#39;));
    print_r(xdebug_debug_zval(&#39;c&#39;));
?>
Nach dem Login kopieren

  打印结果如下
a: (refcount=2, is_ref=1)='Hello world'
b: (refcount=2, is_ref=1)='Hello world'
c: (refcount=1, is_ref=0)='Hello world'
  可见,这个时候php5.5引擎为$c重新建立了一个zval容器,容器中的数据类型、值与$a指向的容器中的完全相同,不同的是其refcount与is_ref的值。
因此,我们可以看出,php5.5的zval容器中的is_ref变量要么标识引用集合,要么标识普通集合,当两者都有时,他将克隆zval容器,来解决冲突问题。
  
  总结:
  1、在php5.5以后,“变量赋值”都是指向赋值,即将某个变量指向特定的zval容器。
  2、“变量引用”则是将变量与变量进行绑定,若绑定的变量中有一个变量改变了指向,则相互绑定的其他变量的指向也随着改变。
    若变量重新引用变量,则其原来的变量绑定解除,转而绑定新的变量。如下代码:
  
<?php
function foo(&$var)
{
    $var =& $GLOBALS["baz"];
}
foo($bar);
?>
Nach dem Login kopieren

 

 
  这将使 foo 函数中的 $var 变量在函数调用时和 $bar 绑定在一起,但接着又被重新绑定到了 $GLOBALS["baz"] 上面。不可能通过引用机制将 $bar 在函数调用范围内绑定到别的变量上面,因为在函数 foo 中并没有变量$bar(它被表示为 $var,但是 $var 只有变量内容而没有调用符号表中的名字到值的绑定)。可以使用引用返回来引用被函数选择的变量。
 
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053350.htmlTechArticlephp引用计数与变量引用 每个php5.5变量都存储在一个叫做zval的变量容器中。 一个zval变量容器,除了包含变量的类型与值外,还包含两个字节...
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Eine Anleitung zur Verwendung von Windows 11- und 10-Umgebungsvariablen für die Profilerstellung Eine Anleitung zur Verwendung von Windows 11- und 10-Umgebungsvariablen für die Profilerstellung Nov 01, 2023 pm 08:13 PM

Umgebungsvariablen sind der Pfad zum Speicherort (oder zur Umgebung), an dem Anwendungen und Programme ausgeführt werden. Sie können vom Benutzer erstellt, bearbeitet, verwaltet oder gelöscht werden und sind nützlich bei der Verwaltung des Verhaltens bestimmter Prozesse. So erstellen Sie eine Konfigurationsdatei, um mehrere Variablen gleichzeitig zu verwalten, ohne sie unter Windows einzeln bearbeiten zu müssen. So verwenden Sie Profile in Umgebungsvariablen Windows 11 und 10 Unter Windows gibt es zwei Sätze von Umgebungsvariablen – Benutzervariablen (gilt für den aktuellen Benutzer) und Systemvariablen (gilt global). Mit einem Tool wie PowerToys können Sie jedoch eine separate Konfigurationsdatei erstellen, um neue und vorhandene Variablen hinzuzufügen und alle auf einmal zu verwalten. So geht's: Schritt 1: Installieren Sie PowerToysPowerTo

Strikter Modus für Variablen in PHP7: Wie können potenzielle Fehler reduziert werden? Strikter Modus für Variablen in PHP7: Wie können potenzielle Fehler reduziert werden? Oct 19, 2023 am 10:01 AM

In PHP7 wurde der strikte Modus eingeführt, der Entwicklern dabei helfen kann, potenzielle Fehler zu reduzieren. In diesem Artikel wird erklärt, was der strikte Modus ist und wie man den strikten Modus in PHP7 verwendet, um Fehler zu reduzieren. Gleichzeitig wird die Anwendung des strikten Modus anhand von Codebeispielen demonstriert. 1. Was ist der strikte Modus? Der strikte Modus ist eine Funktion in PHP7, die Entwicklern helfen kann, standardisierten Code zu schreiben und einige häufige Fehler zu reduzieren. Im strikten Modus gelten strenge Einschränkungen und Erkennungen für die Variablendeklaration, Typprüfung, Funktionsaufrufe usw. Passieren

Interner Fehler: Temporäres Verzeichnis kann nicht erstellt werden [Behoben] Interner Fehler: Temporäres Verzeichnis kann nicht erstellt werden [Behoben] Apr 17, 2023 pm 03:04 PM

Das Windows-System ermöglicht Benutzern die Installation verschiedener Arten von Anwendungen auf Ihrem System mithilfe von ausführbaren Dateien/Setup-Dateien. In letzter Zeit beschweren sich viele Windows-Benutzer darüber, dass sie auf ihren Systemen eine Fehlermeldung namens INTERNALERROR:cannotCreateTemporaryDirectory erhalten, während sie versuchen, eine Anwendung mithilfe einer ausführbaren Datei zu installieren. Das Problem ist nicht darauf beschränkt, sondern verhindert auch, dass Benutzer vorhandene Anwendungen starten können, die auch auf dem Windows-System installiert sind. Einige mögliche Gründe sind unten aufgeführt. Führen Sie die ausführbare Datei zur Installation aus, ohne Administratorrechte zu gewähren. Für die TMP-Variable wurde ein ungültiger oder anderer Pfad angegeben. beschädigtes System

Mindmap der Python-Syntax: Vertiefendes Verständnis der Codestruktur Mindmap der Python-Syntax: Vertiefendes Verständnis der Codestruktur Feb 21, 2024 am 09:00 AM

Python wird aufgrund seiner einfachen und leicht lesbaren Syntax in einer Vielzahl von Bereichen häufig verwendet. Es ist von entscheidender Bedeutung, die Grundstruktur der Python-Syntax zu beherrschen, um sowohl die Programmiereffizienz zu verbessern als auch ein tiefes Verständnis für die Funktionsweise des Codes zu erlangen. Zu diesem Zweck bietet dieser Artikel eine umfassende Mindmap, die verschiedene Aspekte der Python-Syntax detailliert beschreibt. Variablen und Datentypen Variablen sind Container, die zum Speichern von Daten in Python verwendet werden. Die Mindmap zeigt gängige Python-Datentypen, einschließlich Ganzzahlen, Gleitkommazahlen, Zeichenfolgen, boolesche Werte und Listen. Jeder Datentyp hat seine eigenen Eigenschaften und Betriebsmethoden. Operatoren Operatoren werden verwendet, um verschiedene Operationen an Datentypen auszuführen. Die Mindmap deckt die verschiedenen Operatortypen in Python ab, z. B. arithmetische Operatoren und Verhältnisse

Was sind Instanzvariablen in Java? Was sind Instanzvariablen in Java? Feb 19, 2024 pm 07:55 PM

Instanzvariablen in Java beziehen sich auf Variablen, die in der Klasse definiert sind, nicht in der Methode oder dem Konstruktor. Instanzvariablen werden auch Mitgliedsvariablen genannt. Jede Instanz einer Klasse verfügt über eine eigene Kopie der Instanzvariablen. Instanzvariablen werden während der Objekterstellung initialisiert und ihr Zustand wird während der gesamten Lebensdauer des Objekts gespeichert und beibehalten. Instanzvariablendefinitionen werden normalerweise an der Spitze der Klasse platziert und können mit einem beliebigen Zugriffsmodifikator deklariert werden, der öffentlich, privat, geschützt oder der Standardzugriffsmodifikator sein kann. Es hängt davon ab, was wir wollen

Wie erhalte ich Variablen aus der PHP-Methode mit Ajax? Wie erhalte ich Variablen aus der PHP-Methode mit Ajax? Mar 09, 2024 pm 05:36 PM

Die Verwendung von Ajax zum Abrufen von Variablen aus PHP-Methoden ist ein häufiges Szenario in der Webentwicklung. Durch Ajax kann die Seite dynamisch abgerufen werden, ohne dass die Daten aktualisiert werden müssen. In diesem Artikel stellen wir vor, wie man Ajax verwendet, um Variablen aus PHP-Methoden abzurufen, und stellen spezifische Codebeispiele bereit. Zuerst müssen wir eine PHP-Datei schreiben, um die Ajax-Anfrage zu verarbeiten und die erforderlichen Variablen zurückzugeben. Hier ist ein Beispielcode für eine einfache PHP-Datei getData.php:

Einführung in die PHP-Funktion – is_string(): Überprüfen Sie, ob die Variable eine Zeichenfolge ist Einführung in die PHP-Funktion – is_string(): Überprüfen Sie, ob die Variable eine Zeichenfolge ist Jul 24, 2023 pm 09:33 PM

Einführung in die PHP-Funktion – strpos(): Überprüfen Sie, ob eine Variable ein String ist. In PHP ist is_string() eine sehr nützliche Funktion, die verwendet wird, um zu überprüfen, ob eine Variable ein String ist. Wenn wir feststellen müssen, ob eine Variable eine Zeichenfolge ist, kann uns die Funktion is_string() dabei helfen, dieses Ziel einfach zu erreichen. Im Folgenden erfahren Sie, wie Sie die Funktion is_string() verwenden und stellen einige zugehörige Codebeispiele bereit. Die Syntax der Funktion is_string() ist sehr einfach. es muss nur

Tiefes Verständnis von const in der C-Sprache Tiefes Verständnis von const in der C-Sprache Feb 18, 2024 pm 12:56 PM

Ausführliche Erklärung und Codebeispiele von const in C. In der C-Sprache wird das Schlüsselwort const zum Definieren von Konstanten verwendet, was bedeutet, dass der Wert der Variablen während der Programmausführung nicht geändert werden kann. Mit dem Schlüsselwort const können Variablen, Funktionsparameter und Funktionsrückgabewerte geändert werden. Dieser Artikel bietet eine detaillierte Analyse der Verwendung des Schlüsselworts const in der C-Sprache und stellt spezifische Codebeispiele bereit. const modifizierte Variable Wenn const zum Ändern einer Variablen verwendet wird, bedeutet dies, dass die Variable eine schreibgeschützte Variable ist und nicht geändert werden kann, sobald ihr ein Wert zugewiesen wurde. Zum Beispiel: constint

See all articles