


Detailed explanation of PHP variable reference and variable destruction mechanism
Variables are a very important type in php. All our data are operated through variables or constants. Let’s take a look at variable reference and variable destruction. Friends who need it can refer to it
php Variable reference and variable destruction mechanism
In PHP, the symbol "&" represents a reference.
1. Look at the situation without quoting like this:
$a = “hello world”;//定义一个变量,下面赋值给$b $b = $a;//这一步没有在$a之前加符号&,像这样子”$b= & $a”。没有加&,实际上原理是会将变量$a复制拷贝一份,也就是内存中重新申请一个地址存储变量$b了
ps: In php, use "=" direct assignment is actually copying a copy of the variable on the right to b, which will generate a memory space. The result may be that the same content is in two copies in the memory. As mentioned in some aspects of PHP performance, this will occupy more memory space. However, in my contacts, most people didn't pay much attention to it. In fact, the significant difference caused by general application in this way is not obvious. You won't see any effect. In fact, I don't often use & for citations, haha. It’s just that I think it is very necessary to have a deep understanding of the implementation principles. I like to focus on fundamental things.
2. Use the symbol & for quoting
$a = “hello world”; $b = & $a;
When quoting, the PHP engine will not copy a variable. In fact, the pointer points to the address of $a in memory, and $b stores this pointer.
So when using a reference, if you change the value of $b, $a will also change
For example:
$a = “hello world”; $b = & $a; $b = “test new value”;//把b的值改掉,a的值也会跟着改变 echo $a;//输出test new value,因为改变了b的值也会改变a的值。 ===================================== 经常在定义函数的时候看到像这样的情况: function test (& $param) { //函数定义的内容 $param++; }
Explanation: There is a reference in front of $param, so the parameters passed in will not be copied in the memory, but will directly reference the original memory space. So: If the variable value passed in using the symbol & is modified, the value in the original memory space will also be changed.
Take a test as follows:
$k = 8; test($k); echo $k;//结果$k的值被函数里面改变了,输出9。 还会经常看到这样子调用函数: $return = & test_func();
I learned earlier that the mechanism of the php engine is: = will copy the content on the right to the left Variables. So using & means copying the result of the function. In fact, my understanding is that the pointer is given to the variable on the left.
What is a pointer? I used to learn the concept in C language. My understanding is: pointer, pointer, pointing needle (compass, haha). It is easier to understand if you think of a pointer as a memory address. The computer will know where to find data in the memory. This is a superficial understanding, I don’t know how to understand it in depth, haha.
Summary: Use references to reduce memory resource usage.
The explanation of references in the PHP manual is as follows:
References in PHP mean accessing the same variable content with different names. This is not like a C pointer; instead, the reference is a symbol table alias. Note that in PHP, variable names and variable contents are different, so the same content can have different names. The closest analogy is Unix's filenames and the files themselves - the variable names are the directory entries, and the variable contents are the files themselves. References can be thought of as hardlinks in Unix file systems.
3. When destroying variables. It will not change the original value.
Test: $b = & $a;
Since the value of $b is changed, the value of $a also changes. If $b is destroyed (memory It no longer takes up space, it is not null, and it does not have a value of ""). Will the value of $a also be deleted?
In fact, there is a foreign book on PHP that specifically mentions this mechanism. Saw it 2 years ago. I don’t quite remember. The principle is that when a variable is deleted, it will be automatically copied.
In fact, this is to avoid deleting $b and causing the problem of deleting $a.
<?php $a = 'd'; $b = & $a; $b = 8;//因为是引用了,所以把b的值改掉,a的值也跟着改为8了。 var_dump($b,$a); unset($b);//调用unset删除b变量,a变量不会删除 var_dump($b,$a);//输出null和8 ?>
When calling unset to delete the $b variable, the PHP engine discovered from the variable symbol table: the variable $b I wanted to delete originally referenced the variable $ a, this is not easy to delete, because once deleted, the $a variable is gone, so we first copy the $a variable and then delete the $b variable.
About the PHP symbol table: In fact, my understanding is that all variable names during operation are recorded in it and PHP maintains it. The specific data is of course stored in the memory. PHP uses this symbol table to recycle it. Used variable space, release memory space). Go take a look at PHP's garbage collection mechanism (release memory space that is no longer used), which is based on the symbol table.
Example
<?php $long="big_long_variable_name"; $$long="PHP"; /* 用存放在变量$long里的字符串作为新变量的变量名,等同于$big_long_variable_name="PHP"; */ $short=& $big_long_variable_name; /* 取变量$big_long_variable_name的值赋给变量$short,此时$short的值为"PHP",等同于$short=& $$long; */ print "01 /$short is $short."; /* "/$"是转义序列,表示输出一个美元符号$,下同。本语句的作用是输出:01 $short is PHP. */ print "02 Long is $big_long_variable_name."; /* 输出:02 Long is PHP. */ ?> <br /> <br /> <?php $big_long_variable_name.=" rocks!"; /* 重新对$big_long_variable_name赋值。重新赋值过程中,由于在$big_long_variable_name的后面添加了.(点号),因而变量$big_long_variable_name此时的值应为原值("PHP")+新值(" rocks!"),即变量$big_long_variable_name当前完整的值为"PHP rocks!"。下同。*/ print "03 /$short is $short"; /* 输出:03 $short is PHP rocks! */ print "04 Long is $big_long_variable_name"; /* 输出:04 Long is PHP rocks! */ ?> <br /> <br /> 05 $short is PHP rocks! 06 Long is PHP rocks! <br /> <br /> <?php $short.="Programming $short"; /* 重新对变量$short赋值。由于在$short后面添加了.(点号),因此请参考上例分析$short的值。*/ print "07 /$short is $short"; /* 输出:07 $short is PHP rocks!Programming PHP rocks! */ print "08 Long is $big_long_variable_name"; /* 由于变量$short被重新赋值为Programming PHP rocks!,因而变量$big_long_variable_name的值也与$short一同被改变为"PHP rocks!Programming PHP rocks!"。本语句输出:08 Long is PHP rocks!Programming PHP rocks!注意,如果是对具有相同值的一个变量进行销毁unset( ),则另一个变量不适用于此种情况,即不会随之被一同销毁。*/ ?> <br /> <br /> 09 $short is Programming PHP rocks! 10 Long is Programming PHP rocks! <br /> <br /> <?php $big_long_variable_name.="Web Programming $short"; /* 变量$big_long_variable_name被重新赋值,此时它完整的值应为PHP rocks!Programming PHP rocks!Web Programming PHP rocks!Programming PHP rocks!。变量$short的值此时与变量$big_long_variable_name一致。请分别参考第5处、第10处注释进行分析。*/ print "11 /$short is $short"; /* 输出:11 PHP rocks!Programming PHP rocks!Web Programming PHP rocks!Programming PHP rocks! */ print "12 Long is $big_long_variable_name"; ?> <br /> <br /> <?php unset($big_long_variable_name); /* 用unset( )销毁变量$big_long_variable_name,变量$short不会因此受到任何影响。*/ print "13 /$short is $short"; /* 虽然销毁了变量$big_long_variable_name,但$short没有受到影响,它的值仍是最近一次被赋予的PHP rocks!Programming PHP rocks!Web Programming PHP rocks!Programming PHP rocks! */ print "14 Long is $big_long_variable_name."; /* 变量$big_long_variable_name已被销毁,故而无值。输出:14 Long is. */ snow; ?> <br /> <br /> <?php $short="No point TEST1"; /* 重新对变量$short赋值。由于这次没有在$short后面添加.(点号),因此$short当前的值为"No point TEST1"。*/ print "15 /$short is $short."; /* 输出:15 $short is No point TEST1. */ $short="No point TEST2 $short"; /* 重新对变量$short赋值。没在$short的后面添加.(点号),但引用了它自身最近一次的值"No point TEST1"。*/ print "16 /$short is $short."; /* 输出:16 $short is No point TEST2 No point TEST1. */
The above is the entire content of this article, I hope it will be helpful to everyone's learning.
Related recommendations:
PHP Relevant knowledge and application of file upload
PHP Loops - Understanding the While loop is related to the use of
PHP 5 echo and print statements Knowledge and Application
The above is the detailed content of Detailed explanation of PHP variable reference and variable destruction mechanism. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
