Home  >  Article  >  Backend Development  >  PHP reference & detailed explanation_PHP tutorial

PHP reference & detailed explanation_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 16:59:25826browse

A simple ampersand in PHP can lead to a large article. Today we will briefly talk about the usage of variable references and parameter value transfer in PHP. I hope beginners will read and refer to this article.

What $a=test(); gets in this way is not actually a function reference return. It is no different from an ordinary function call. As for the reason: This is the regulation of PHP
PHP stipulates that what is obtained through $a=&test(); is the reference return of the function
As for what is a reference return (the PHP manual says: Reference return is used when you want to use a function to find which variable the reference should be bound to.) This nonsense made me unable to understand it for a long time

Using the above example to explain it is
Calling a function using $a=test() only assigns the value of the function to $a, and any changes to $a will not affect $b
in the function. When calling a function through $a=&test(), its function is to point the memory address of the $b variable in return $b and the memory address of the $a variable to the same place
That is to say, the effect equivalent to this is produced ($a=&b;), so changing the value of $a also changes the value of $b, so after executing

The code is as follows Copy code
$a=&test();
 代码如下 复制代码
$a=&test();
$a=5;
$a=5;

Afterwards, the value of $b becomes 5

Static variables are used here to let everyone understand the reference return of functions. In fact, the reference return of functions is mostly used in objects

Object reference


The above code is the effect of running in PHP5
In PHP5, object copying is achieved through references. In the above column, $b=new a; $c=$b; is actually equivalent to $b=new a; $c=&$b;

The default in PHP5 is to call objects by reference, but sometimes you may want to create a copy of the object and hope that changes to the original object will not affect the copy. For this purpose, PHP defines a special method called __clone .


The role of quotation

If the program is relatively large, there are many variables referencing the same object, and you want to clear it manually after using the object, I personally recommend using the "&" method, and then using $var=null to clear it. Otherwise, use the default of php5 Method. In addition, for transferring large arrays in php5, it is recommended to use the "&" method, after all, it saves memory space.


Unquote

When you unset a reference, you just break the binding between the variable name and the variable's contents. This does not mean that the variable contents are destroyed. For example:
 代码如下 复制代码

$a = 1;
$b =& $a;
unset ($a);
?> 

The code is as follows Copy code

$a = 1;

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

?>

 代码如下 复制代码

$var =& $GLOBALS["var"];
?> 

Won’t unset $b, just $a. global quote When you declare a variable with global $var you actually create a reference to the global variable. That is the same as doing this:
The code is as follows Copy code
$var =& $GLOBALS["var"];<🎜> ?>

This means that, for example, unset $var will not unset a global variable.

$this
In an object method, $this is always a reference to the object that calls it.

//Another little interlude below
The address pointing (similar to a pointer) function in PHP is not implemented by the user himself, but is implemented by the Zend core. The reference in PHP adopts the principle of "copy-on-write", which means that unless a write operation occurs, it points to the same address. Variables or objects will not be copied.

In layman terms
1: If there is the following code

In fact, at this time, $a and $b both point to the same memory address, rather than $a and $b occupying different memories

Output result: 122, you know, these two variables are one "person" from now on, don't bully them!
The code is as follows
 代码如下 复制代码

$source="110";
$a=$source;
$b=&$source;
$source="120";
echo $a."rn",$b;
Copy code

$source="110";

$a=$source;

$b=&$source;

$source="120";

echo $a."rn",$b;

This is a problem with PHP’s reference operator &. Because & is applied to variable $b when assigning value, $b does not copy “110” to itself but directly points to the nest of $source. From now on, $ The source is his $b. No matter how $source changes, it will lead to changes in $b - much like the relationship between a host and two monitors. Since this is the relationship, changes in $b will of course lead to changes in $source
 代码如下 复制代码

class MysqlConnect{} //用来创建数据库连接,那么我们每次调用的时候可以这样写
 
$conn=& new MysqlConnect();

This is a problem with PHP’s reference operator &. Because & is applied to variable $b when assigning value, $b does not copy “110” to itself but directly points to the nest of $source. From now on, $ The source is his $b. No matter how $source changes, it will lead to changes in $b - much like the relationship between a host and two monitors. Since this is the relationship, changes in $b will of course lead to changes in $source

In fact, for the sake of program readability and subsequent programming misoperations, I do not recommend using the & reference operator, think about it. Before row 10,000, you used $b=&$source; and you may not remember it after row 10,000. If you accidentally assign the wrong value, it will be enough for you to drink when debugging! Haha...

In fact, this operator is more used in database connections, because when we create a database connection object, we often only need one, and too many are useless.

The code is as follows Copy code
class MysqlConnect{} //Used to create a database connection, then we can write like this every time we call $conn=& new MysqlConnect(); This way of writing can ensure that the database connection will not be created repeatedly, consuming system resources. But if you really need multiple different connections, you must not write it like this.
http://www.bkjia.com/PHPjc/631318.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/631318.htmlTechArticleWhat is simply obtained in php is not actually a function reference return, which is no different from an ordinary function call. Reason: This is a requirement of PHP. PHP requires $a=test();...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn