zoukankan      html  css  js  c++  java
  • PHP手册阅读笔记2

    关于引用

    引用是什么

    在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的 hardlink。

    $a =& $b;//表示$a,$b指向同一个地方。

    如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。

    function foo(&$var) { }
    
    foo($a); // $a is "created" and assigned to null
    
    $b = array();
    foo($b['b']);
    var_dump(array_key_exists('b', $b)); // bool(true)
    
    $c = new StdClass;
    foo($c->d);
    var_dump(property_exists($c, 'd')); // bool(true)

    如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。

    $var1 = "Example variable";
    $var2 = "";
    
    function global_references($use_globals)
    {
        global $var1, $var2;
        if (!$use_globals) {
            $var2 =& $var1; // visible only inside the function
        } else {
            $GLOBALS["var2"] =& $var1; // visible also in global context
        }
    }
    
    global_references(false);
    echo "var2 is set to '$var2'\n"; // var2 is set to ''
    global_references(true);
    echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'

    函数的传值调用

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

    注意:

        上面的“ test($b); ” 中的$b前面不要加 & 符号,但是在函数“call_user_func_array”中,若要引用传参,就得需要 & 符号,如下代码所示:

    <?php
    
    
    
    function a(&$b){
    
        $b++;
    
    }
    
    $c=0;
    
    
    
    call_user_func_array('a',array(&$c));
    
    
    
    echo $c;
    
    
    
    //输出 1
    
    
    
    ?>

    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而已, 而$a做任何改变 都不会影响到函数中的$b
    而通过$a=&test()方式调用函数呢, 他的作用是 将return $b中的 $b变量的内存地址与$a变量的内存地址 指向了同一个地方
    即产生了相当于这样的效果($a=&$b;) 所以改变$a的值 也同时改变了$b的值 所以在执行了
    $a=&test();
    $a=5;
    以后,$b的值变为了5

    这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中。

    This is the way how we use pointer to access variable inside the class.
    
    <?php
    class talker{
    
        private $data = 'Hi';
    
        public function & get(){
            return $this->data;
        }
       
        public function out(){
            echo $this->data;
        }   
    
    }
    
    $aa = new talker();
    $d = &$aa->get();
    
    $aa->out();
    $d = 'How';
    $aa->out();
    $d = 'Are';
    $aa->out();
    $d = 'You';
    $aa->out();
    ?>
    
    the output is "HiHowAreYou"

     

  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    An existing connection was forcibly closed by the remote host
    各种浏览器的兼容css
    vs输出窗口,显示build的时间
    sass
    网站设置404错误页
    List of content management systems
    css footer not displaying at the bottom of the page
    强制刷新css
    sp_executesql invalid object name
  • 原文地址:https://www.cnblogs.com/phplover/p/3114606.html
Copyright © 2011-2022 走看看