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

    再次理解引用返回
    服务器君一共花费 118.411 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. [软件工程与项目管理] 了解一点WebKit 9 个条目
  2. [Python程序设计] Tornado源码解析 23 个条目
  3. [PHP程序设计] 对输入文件类型的检测 1 个条目
  4. [智力开发与知识管理] 整体性学习步骤 9 个条目
  5. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  6. [智力开发与知识管理] 整体性学习策略 9 个条目
  7. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  8. [数据库技术] 数据库范式篇 5 个条目
  9. [Python程序设计] Tornado 服务器环境配置 3 个条目
  10. [运维管理] 路由器与交换机 4 个条目
  11. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  12. [PHP程序设计] PHP与Stream流 5 个条目
窗口 -- [资讯]