Pasando referencia en PHP y aplicación en el proyecto y explicación detallada

Al ver el siguiente código, muchos estudiantes deben estar un poco confundidos al ver & $ data

/**
 * 删除一维数组里的多个key
 */
function WSTUnset(&$data,$keys){
    
    
    if($keys!='' && is_array($data)){
    
    
        $key = explode(',',$keys);
        foreach ($key as $v)unset($data[$v]);
    }
}
/**
 * 只允许一维数组里的某些key通过
 */
function WSTAllow(&$data,$keys){
    
    
    if($keys!='' && is_array($data)){
    
    
        $key = explode(',',$keys);
        foreach ($data as $vkeys =>$v)if(!in_array($vkeys,$key))unset($data[$vkeys]);
    }
}

¿Qué es la referencia de php?

php (es decir, agregue el ampersand delante de la variable o función, objeto, etc.), mi comprensión personal es tomar la dirección de almacenamiento de la variable, cambiar la variable, cambiar directamente la variable en la dirección raíz y no creará una nueva variable
y lenguaje C Los punteros son diferentes. El puntero en lenguaje C almacena la dirección donde se almacena el contenido de la variable en la memoria.

El siguiente fragmento de código
1. Referencia variable

<?php
    $a="ABC";
    $b =&$a;
    echo $a;//这里输出:ABC
    echo $b;//这里输出:ABC
    $b="EFG";
    echo $a;//这里$a的值变为EFG 所以输出EFG
    echo $b;//这里输出EFG
?>

2. Función que pasa por referencia (llamada por dirección)

<?php

    function test(&$a){
    
    
        $a=$a+100;
    }
    $b=1;
    echo $b;//输出1

    test($b);   //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了

    echo "<br>";
    echo $b;//输出101
?>

Cabe señalar que aquí prueba (1); cometerá un error, piense usted mismo en la razón.

Nota:

La anterior "prueba ( b);" en b); "b ) ;"" delante de la b no necesita agregar el ampersand, pero en la función "call_user_func_array", si desea citar y pasar parámetros, debe necesitar el ampersand, como se muestra en el siguiente código:

<?php
function a(&$b){
    
    
    $b++;
}
$c=0;

call_user_func_array('a',array(&$c));

echo $c;

//输出 1

?>

3. Retorno de referencia de función

<?php
function &test(){
    
    
    static $b=0;//申明一个静态变量
    $b=$b+1;
    echo $b;
    return $b;
}

$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2

$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6
?>

Lo siguiente explica:

通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 
至于原因:PHP规定通过$a=&test(); 方式得到的才是函数的引用返回
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) 
用上面的例子来解释就是$a=test()方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变 
都不会影响到函数中的$b,而通过$a=&test()方式调用函数呢, 他的作用是
 将return $b中的 $b变量的内存地址与$a变量的内存地址 指向了同一个地方
即产生了相当于这样的效果($a=&$b;) 所以改变$a的值 也同时改变了$b的值 所以在执行了
$a=&test();
$a=5;
以后,$b的值变为了5

Aquí es para que todos comprendan el retorno de referencia de la función para usar la variable estática. De hecho, el retorno de referencia de la función se usa principalmente en el objeto. Lo
anterior es el contenido de mi extracto, explicación detallada: https: // www.cnblogs.com/alsf/p/9621362. html

Supongo que te gusta

Origin blog.csdn.net/EasyTure/article/details/112991812
Recomendado
Clasificación