zoukankan      html  css  js  c++  java
  • 讨论变量,静态变量,变量的引用,全局变量,以及占用资源的关系

    引用赋值、传值赋值

      很多人误解php中的引用跟C当中的指针一样,事实上并非如此,而且很大差别。

      C语言中的指针除了在数组传递过程中不用显式申明外,其他都需要使用*进行定义,而php中对于地址的指向功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时复制”的原理。除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

    $a = array('a','c'...'n');
    $b = $a;
    // $a 和 $b 指向的是同一块内存空间

      如果程序仅执行到这里,$a和$b是相同的,但是并没有像C那样,$a和$b占用不同的内存空间,而是指向了同一块内存,这就是php和c的差别。并不需要写成 $b = &$a,zend就已经帮你实现了引用。

    $a = array('a','c'...'n');
    $b = $a;
    printArray($a);
    
    function printArray( &$arr ) { //引用传递
        print(count($arr));
    }
    
    //Zend会为$b重新开辟一块内存空间储存值,因为$a的值有可能会被改变。写时复制

      如果上面的代码直接传递$a值到printArray()中,此时并不存在引用传递,所以没有出现写时复制。

      大家可以测试一下上面两行代码的执行效率,比如外面加入一个循环1000次,看看运行的耗时,结果会让你知道不正确使用引用会导致性能下降30%以上。而在论坛看到却是用&来引用可以减少"拷贝",减少资源。

    引用返回、实例化引用、直接引用.

    //引用返回
    function &test($d){
        return $d;
    }
    //实例化引用 $xml = &new xml_object::create('书','书的介绍',array("备注"=>'书是智慧之书'));
    //直接引用 $xml = &xml_object::create('书','书的介绍',array("备注"=>'书是智慧之书'));
    * 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 & 

    未完待续 http://blog.sina.com.cn/s/blog_694c144f0100ymsl.html

  • 相关阅读:
    Windows系统下安装运行Kafka
    Git强制拉取覆盖本地
    Windows Server 2008/2012 计划任务配置执行bat
    Task.Run()任务执行
    Oracle数据重复,只取一条
    Oracle数据库查看表空间是否为自增的
    How to disable Microsoft Compatibility Telemetry
    最新版谷歌浏览器的Flash设置已经不能保存了?
    亲子之间,在于看懂,无关耐心zz
    读懂孩子有方法
  • 原文地址:https://www.cnblogs.com/mysic/p/4872383.html
Copyright © 2011-2022 走看看