Home  >  Article  >  Backend Development  >  Infinite classification of recursive functions

Infinite classification of recursive functions

WBOY
WBOYOriginal
2016-08-30 09:36:401227browse

function fun($pid=0,&$brr=array()){//Why does it not work if you remove &?

<code>$sql="select * from wuxianji where pid=$pid";
$rs=mysql_query($sql);

while($arr=mysql_fetch_assoc($rs)){
    $brr[]=$arr;
    fun($pid=$arr['id'],$brr);
}
return $brr;</code>

}
$brr=fun();
echo '

';print_r($brr);
die();

//What does &$brr=array() & in function parameter passing mean? what's the effect?

Reply content:

function fun($pid=0,&$brr=array()){//Why does it not work if you remove &?

<code>$sql="select * from wuxianji where pid=$pid";
$rs=mysql_query($sql);

while($arr=mysql_fetch_assoc($rs)){
    $brr[]=$arr;
    fun($pid=$arr['id'],$brr);
}
return $brr;</code>

}
$brr=fun();
echo '

';print_r($brr);<br>die();</p>
<p>//What does &$brr=array() & in function parameter passing mean? what's the effect? </p>

                            
                        
            <p class="answer fmt" data-id="1020000006752366">
                                    </p>
<p>Look at the examples in the manual and you will understand&</p>
                            
            <p class="answer fmt" data-id="1020000006752469">
                                    
</p>
<p>Because & is a reference, when the & symbol is used, the modifications you make to the parameters in the function will also be carried outside the function. Without the & symbol, the modification of parameters you face in the function ends when the function ends. </p>
<pre class="brush:php;toolbar:false"><code>function a1($a) {
    $a = 20;
}
function a2(&$a) {
    $a = 20;
}
$a = 10;
a1($a);
var_dump($a);
a2($a);
var_dump($a);</code>

Just like the above code, the output is 10, 20 in order. Because a2 uses the & symbol, the modification of $a in a2 also affects the $a actually passed to a2.

Infinitus classification requires an array that can be accumulated, similar to static. If the & is removed, the $array will become empty again every time it is recursed, and the data will not be accumulated!

& means that the address is passed, that is, any operation on the variable in the function will change the value of the external variable. Otherwise, when the function call ends, the changes in these variables will disappear and can only be changed by returning from the function

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