• 让函数返回引用,就是这么回事

    再次理解引用返回
    服务器君一共花费 177.143 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    反复是学习的好方法,如果对“引用返回”的概念还不是很明晰,我们继续去探讨,不厌其烦地举例与理解。

    函数返回一个引用

    从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 & :

    <?php
    function &returns_reference()
    {
        return $someref;
    }
    
    $newref =& returns_reference();
    ?>  
    

    对比以下简单代码:

    <?php
    
    class application
    {
    	// 声明函数返回的是引用
        function &getApplication($id = null, $config = array(), $prefix='J') 
        {
            static $instance;
            return $instance = 0;
        }
    }
    $a = &application::getApplication();
    $b = &application::getApplication();
    $c = &application::getApplication();
     
    echo $a."|".$b."|".$c."<br />";
    // 改值
    $a = 1;
    echo $a."|".$b."|".$c;
    
    ?>
    

    程序运行结果:

    0|0|0
    1|1|1
    
    • 这里变量 $a、$b、$c 都是类成员方法返回的引用,所以一旦修改其中一个变量的值,其它引用的值也会跟着改变。这就是函数引用返回产生的作用,但究竟如何利用这个编程特性,那要看自己编程过程中体会了。

    比较一下值传递与引用传递,值传递就是 copy 一份,把 copy 传递过去。而使用引用传递参数的时候使用 & 操作符,便可以传递变量的引用过去,而不是copy一份。当我们在函数内部修改这个参数时,函数外部的变量也跟着被一起修改了。现在明白了吧? 如果希望从内核去理解引用,可以参考文章: PHP内核探索:引用与函数执行

    再补充一个官方的例子:

    <?php
    // This is the way how we use pointer to access variable inside the class.
    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"
    ?>
    
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [计算机算法] 两数交换的各种算法细节 2 个条目
  2. [Python程序设计] urls.py设置技巧 8 个条目
  3. [移动开发] ListView 使用相关问题集 1 个条目
  4. [数据结构] 散列表(哈希表) 13 个条目
  5. [移动开发] Layout_weight属性解析 5 个条目
  6. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  7. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  8. [Python程序设计] Tornado 服务器环境配置 3 个条目
  9. [移动开发] Activity 初步知识 2 个条目
  10. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  11. [移动开发] Android里的ContentValues 2 个条目
  12. [Python程序设计] Python Web部署的背景知识 9 个条目
窗口 -- [协会]