zoukankan      html  css  js  c++  java
  • php引用

    <?php
    function add_some_extra(&$string) // 引入变量,使用同一个存储地址
    {
        $string .= 'and something extra.';
    }
    $str = 'This is a string, ';
    add_some_extra($str);
    echo $str;    // outputs 'This is a string, and something extra.'
    ?> 

    输出:
    This is a string, and something extra.

    如果没有这个&符号,

    <?php
    function add_some_extra($string) 
    {
        $string .= 'and something extra.';
    }
    $str = 'This is a string, ';
    add_some_extra($str);
    echo $str;    // outputs 'This is a string, '
    ?> 

    foreach 引用


    $data1 = Array(1,4,2,6);
    $data2 = array(
    array('北京','上海','深圳','广州'),
    array('黑龙江','吉林','辽宁','江苏')
    );

    吧data1里的元素挨个放到data2li

    foreach ($data2 as &$item) {
    $item['number'] = $data1[$key];
    }

    其实和下面的代码没啥区别:但是就觉得逼格可能高点。

    foreach ($data2 as $k => $v) {
    $data2[$k]['num'] = $data1[$k];
    }

    输出结果:

    Array
    (
        [0] => Array
            (
                [0] => 北京
                [1] => 上海
                [2] => 深圳
                [3] => 广州
                [number] => 1
            )
    
        [1] => Array
            (
                [0] => 黑龙江
                [1] => 吉林
                [2] => 辽宁
                [3] => 江苏
                [number] => 4
            )
    
    )

    1.变量的引用

    PHP 的引用允许你用两个变量来指向同一个内容

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

    2.函数的引用传递(传址调用

    <?php
    
        function test(&$a){
            $a=$a+100;
        }
        $b=1;
        echo $b;//输出1
    
        test($b);   //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
    
        echo "<br>";
        echo $b;//输出101
    ?>

    3.函数的引用返回 

    <?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
    ?>

    下面解释下: 
    通过这种方式a=test();  a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因: 这是PHP的规定PHP规定通过a=&test(); 方式得到的才是函数的引用返回
    至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) 这句狗屁话 害我半天没看懂

    用上面的例子来解释就是
    a=test()a=test()方式调用函数,只是将函数的值赋给a而已, 而a a做任何改变 都不会影响到函数中的b
    而通过a=&test()方式调用函数呢, 他的作用是 将returna=&test()方式调用函数呢, 他的作用是 将returnb中的 bb变量的内存地址与a变量的内存地址 指向了同一个地方
    即产生了相当于这样的效果(a=&a=&b;) 所以改变a a的值 也同时改变了b的值 所以在执行了
    a=&test();a=&test();a=5;
    以后,$b的值变为了5

    函数返回引用类型,这种应用方式需要声明函数时,在函数名前增加&符号,并且,在调用时,要用引用赋值方式, 实例代码如下:
    function &func() {
        return $a;
    }
    $a = func();  //这种调用方式得到的不是引用传值
    $a =& func(); //这样调用才是引用传值

    6.取消引用
    当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如: 

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






  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/yszr/p/10211746.html
Copyright © 2011-2022 走看看