this is the difference between normal assignment and reference assignment. Ordinary assignment only passes the value of $a to $b, while the following reference assignment not only points $b to the same address space as $a, at this time, $b is $a, even now unset ($b), output is still output and its value is $a.
above is very common
below. & $a, which means let an all use the same address
$a = null; Assign this address a value of null, so what is printed is null
. It should be like this. Yes, it is. This is it.
clarify a concept first:
ordinary assignment, change one, the value of other variables remains the same;
reference variable assignment, change one, and the value of other variables changes accordingly.
Let's go into more detail:
in fact, this situation is all related to reference count .
We know that the container that stores variables in php is a container called zval
. In addition to data values and types, this container also stores two pieces of information, one is is_ref
, indicating whether the variable is a reference variable, and the other is refcount
, which represents the number of variables. Next, look at the code:
look at your first kind
$a = new Per();
$b = $a;
$a = null;
In the second line of , when you assign the assigned variable a
to b
, this is the mutual assignment between ordinary variables. So the is_ref flag will not change, while refcount will increment by + 1; because the values and data types of $an and $b are the same, it's okay to use the same zval container;
but when you change one of the values below, the original refcount
on $a will be subtracted by one, and $b will use a new memory address to generate a new zval container.
look at the second type:
$a = new Per();
$b = &$a;
$a = null;
in this case, look at the second line. When there is a reference action, the is_ref identification in the $a variable will change from 0 to 1, indicating that the variable is a reference variable, while refcount will increment itself by + 1, indicating the number of variables in the container.
because you are using the same memory address, the same zval container, and the reference relationship. So if you change one value, the rest of the referenced values will change accordingly.
can be tested with the following code: is_ref
and refcount
some changes in ordinary variable assignment and reference assignment:
$a = 10;
xdebug_debug_zval('a');
$b = &$a;
xdebug_debug_zval('a');
$a = 20;
xdebug_debug_zval('a');
$a = 10;
xdebug_debug_zval('a');
$b = $a;
xdebug_debug_zval('a');
$a = 20;
xdebug_debug_zval('b');
I believe you will find something, above.
the first one is passed by value, passing the memory address of the object. The values of $an and $b point to the memory address of the object
the second is reference passing, passing the address of the variable. By learning the c/cPP language, we know that the variable itself needs a space to store its own address, and the value of $b points to the memory address of $a, so the second unset ($a) will destroy the memory allocated by the variable, while $b will find the memory address of the object through the address of $a. Without $a, it naturally points to an invalid memory address.
Previous: The pyplot of python in Mac calls show () Times error, how to solve it?
Next: Dianping's latest anti-crawling: identify dynamic second-cut agent IP?
in order to facilitate development, we plan to create a LNMP environment based on docker, which makes it much more convenient to change computers or unify the team s development environment. choreographed a docker-compose.yaml file with nginx, php-fp...
external network access domain name: https: api.baidu.com internal network domain name: http: local.baidu.com this domain name is inaccessible outside the network! It is 127.0.0.1 pointed to by a private network address. I use nginx reverse proxy ...
description: a regular match is given to the content of an input box, and the matching content is the product activation code. looks like this: "0C31-0B81-BB32-3094-0C31-0B81-BB32-3094 " Code: $( -sharplicenseCode ).keyup(function () { le...
I configured the MIME type of the file with the amr suffix in the apache configuration as application ms-download, Why it is a garbled page when opening a file in amr format using window.open in chrome, while a file in amr format can be successfully dow...
what does the code circled in the following picture mean? ...
rewrite rules: RewriteRule (.*) (.*) (.*) index .html index.php?p=$1&c=$2&a=$3 [QSA] access Home Blog blog index.html?page=2 can access index.php?p=Home&c=Blog&c=blog&page=2 normally but when the original link is index.php?p=Home&c=Blog&a...
$selectTip = $pdo->query("SELECT * FROM `tips_rate` WHERE `tip_id` = ".$row[ id ]." " ); $selecttotal = mysqli_num_rows($selectTip); $rate = $pdo->query("SELEC...
the following is the back-end code I think $username= is a randomly generated string in the output, so write $username=$number; like this, but this is an execution error, how to do it? For advice, thank you <?php $username=$_POST[ username ]; $nu...
adopt a reward of 10 yuan, 1045 Access denied for user root @ localhost (using password:NO) recently, when I was at the front end of my self-study, I came into contact with a little bit of database. This happened when I made a new connection on ...
the original domain name of our company s website has expired. I want to change it to another domain name. How can I change it? The website is developed using Aliyun s Yunmeng. ...
post table is the article table, the primary key is id tag table is the tag table, the primary key is id post_tag is the intermediate mapping table, and the field is post_id,tag_id now I want to select tag 1 to find out that all the tags and article...
what happens when you get a list of followers through access_token after getting access_token and show that this operation cannot be performed? $url = "https: api.weixin.qq.com cgi-bin token?grant_type=client_credential&appid=$appid&secre...
In apache,event mode, 8 processes are started. Set to perform 10000 automatic recreations. On the next day, there were only two hundred and three processes. is this the number of processes that apache thinks there are not enough tasks and automaticall...
$first is the data read by the database as shown in figure : read through the database can not change the line, directly written in the code can break the line, solve =! ...
as shown in the figure, the generated url does not have a domain name. Where do I need to configure it? ...
there is an h5 page embedded in the encapsulated APP. After the function of issuing an order, how can I get the user s id to add the address and place the order ...
1. Background of the problem: recently, it has been almost exclusively said on php7, that only php7 compiled with GCC 4.8 will open Global Register for opline and execute_data . 2. Question description: Q: what is 1Global Register for opline and e...
the query data is printed to see that _ id is objectID,. If it is directly converted to json,_id, it will be empty. Can you change objectID to string, and then to json? ...
$result= array(); foreach ($infos as $key => $info) { $result[$info[ time ]][] = $info;}; $results=array_slice($result,0,255); in this code, I want to use array_slice to remove the key value of $result, but I don t use . ...
stateful fields are often saved in the database, which are represented by numbers: 0-> fail reject 1-> success pass and so on, I want to convert 0 or 1 into Chinese characters in the obtained results, is there any good way to quickly complete t...