Table des matières
php引用计数与变量引用
Maison développement back-end tutoriel php 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;));
?>
Copier après la connexion

  打印结果如下
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);
?>
Copier après la connexion

 

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053350.htmlTechArticlephp引用计数与变量引用 每个php5.5变量都存储在一个叫做zval的变量容器中。 一个zval变量容器,除了包含变量的类型与值外,还包含两个字节...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un guide d'utilisation des variables d'environnement Windows 11 et 10 pour le profilage Un guide d'utilisation des variables d'environnement Windows 11 et 10 pour le profilage Nov 01, 2023 pm 08:13 PM

Les variables d'environnement sont le chemin d'accès à l'emplacement (ou à l'environnement) où les applications et les programmes s'exécutent. Ils peuvent être créés, édités, gérés ou supprimés par l'utilisateur et s'avèrent utiles lors de la gestion du comportement de certains processus. Voici comment créer un fichier de configuration pour gérer plusieurs variables simultanément sans avoir à les modifier individuellement sous Windows. Comment utiliser les profils dans les variables d'environnement Windows 11 et 10 Sous Windows, il existe deux ensembles de variables d'environnement : les variables utilisateur (s'appliquent à l'utilisateur actuel) et les variables système (s'appliquent globalement). Cependant, en utilisant un outil comme PowerToys, vous pouvez créer un fichier de configuration distinct pour ajouter des variables nouvelles et existantes et les gérer toutes en même temps. Voici comment procéder : Étape 1 : Installer PowerToysPowerTo

Mode strict pour les variables en PHP7 : comment réduire les bugs potentiels ? Mode strict pour les variables en PHP7 : comment réduire les bugs potentiels ? Oct 19, 2023 am 10:01 AM

Le mode strict a été introduit dans PHP7, ce qui peut aider les développeurs à réduire les erreurs potentielles. Cet article expliquera ce qu'est le mode strict et comment utiliser le mode strict en PHP7 pour réduire les erreurs. Parallèlement, l'application du mode strict sera démontrée à travers des exemples de code. 1. Qu’est-ce que le mode strict ? Le mode strict est une fonctionnalité de PHP7 qui peut aider les développeurs à écrire du code plus standardisé et à réduire certaines erreurs courantes. En mode strict, il y aura des restrictions et une détection strictes sur la déclaration des variables, la vérification du type, l'appel de fonction, etc. Passer

Erreur interne : impossible de créer un répertoire temporaire [Résolu] Erreur interne : impossible de créer un répertoire temporaire [Résolu] Apr 17, 2023 pm 03:04 PM

Le système Windows permet aux utilisateurs d'installer différents types d'applications sur votre système à l'aide de fichiers exécutables/de configuration. Récemment, de nombreux utilisateurs de Windows ont commencé à se plaindre de recevoir une erreur nommée INTERNALERROR:cannotCreateTemporaryDirectory sur leurs systèmes lorsqu'ils essayaient d'installer une application à l'aide d'un fichier exécutable. Le problème ne se limite pas à cela mais empêche également les utilisateurs de lancer des applications existantes, également installées sur le système Windows. Certaines raisons possibles sont énumérées ci-dessous. Exécutez l'exécutable pour l'installer sans accorder les privilèges d'administrateur. Un chemin non valide ou différent a été fourni pour la variable TMP. système endommagé

Que sont les variables d'instance en Java Que sont les variables d'instance en Java Feb 19, 2024 pm 07:55 PM

Les variables d'instance en Java font référence aux variables définies dans la classe, et non dans la méthode ou le constructeur. Les variables d'instance sont également appelées variables membres. Chaque instance d'une classe possède sa propre copie de la variable d'instance. Les variables d'instance sont initialisées lors de la création de l'objet et leur état est enregistré et conservé tout au long de la durée de vie de l'objet. Les définitions de variables d'instance sont généralement placées en haut de la classe et peuvent être déclarées avec n'importe quel modificateur d'accès, qui peut être public, privé, protégé ou le modificateur d'accès par défaut. Cela dépend de ce que nous voulons que ce soit

Carte mentale de la syntaxe Python : compréhension approfondie de la structure du code Carte mentale de la syntaxe Python : compréhension approfondie de la structure du code Feb 21, 2024 am 09:00 AM

Python est largement utilisé dans un large éventail de domaines grâce à sa syntaxe simple et facile à lire. Il est crucial de maîtriser la structure de base de la syntaxe Python, à la fois pour améliorer l’efficacité de la programmation et pour acquérir une compréhension approfondie du fonctionnement du code. À cette fin, cet article fournit une carte mentale complète détaillant divers aspects de la syntaxe Python. Variables et types de données Les variables sont des conteneurs utilisés pour stocker des données en Python. La carte mentale affiche les types de données Python courants, notamment les entiers, les nombres à virgule flottante, les chaînes, les valeurs booléennes et les listes. Chaque type de données a ses propres caractéristiques et méthodes de fonctionnement. Opérateurs Les opérateurs sont utilisés pour effectuer diverses opérations sur les types de données. La carte mentale couvre les différents types d'opérateurs en Python, tels que les opérateurs arithmétiques, ratio

Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Mar 09, 2024 pm 05:36 PM

L'utilisation d'Ajax pour obtenir des variables à partir de méthodes PHP est un scénario courant dans le développement Web. Grâce à Ajax, la page peut être obtenue dynamiquement sans actualiser les données. Dans cet article, nous présenterons comment utiliser Ajax pour obtenir des variables à partir de méthodes PHP et fournirons des exemples de code spécifiques. Tout d’abord, nous devons écrire un fichier PHP pour gérer la requête Ajax et renvoyer les variables requises. Voici un exemple de code pour un simple fichier PHP getData.php :

Introduction à la fonction PHP — is_string() : Vérifiez si la variable est une chaîne Introduction à la fonction PHP — is_string() : Vérifiez si la variable est une chaîne Jul 24, 2023 pm 09:33 PM

Introduction à la fonction PHP — strpos() : Vérifier si une variable est une chaîne En PHP, is_string() est une fonction très utile, qui est utilisée pour vérifier si une variable est une chaîne. Lorsque nous devons déterminer si une variable est une chaîne, la fonction is_string() peut nous aider à atteindre facilement cet objectif. Ci-dessous, nous apprendrons comment utiliser la fonction is_string() et fournirons quelques exemples de code associés. La syntaxe de la fonction is_string() est très simple. il suffit qu'il

Compréhension approfondie de const en langage C Compréhension approfondie de const en langage C Feb 18, 2024 pm 12:56 PM

Explication détaillée et exemples de code de const en C En langage C, le mot-clé const est utilisé pour définir des constantes, ce qui signifie que la valeur de la variable ne peut pas être modifiée lors de l'exécution du programme. Le mot-clé const peut être utilisé pour modifier les variables, les paramètres de fonction et les valeurs de retour de fonction. Cet article fournira une analyse détaillée de l'utilisation du mot-clé const en langage C et fournira des exemples de code spécifiques. variable const modifiée Lorsque const est utilisé pour modifier une variable, cela signifie que la variable est une variable en lecture seule et ne peut pas être modifiée une fois qu'une valeur lui a été attribuée. Par exemple : constante

See all articles