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

  • 相关阅读:
    解决android模拟器太大,小屏幕无法完全显示的问题
    寡人写的第一个HTML5页面
    android开发环境重装系统之后的配置
    PHP程序的一次重构记录
    重构遗留代码(1):金牌大师
    java加密算法研究
    理解Java常量池
    由一个项目看java TCP/IP Socket编程
    java List分组和排序处理
    JAVA获取方法参数名的分析(一)
  • 原文地址:https://www.cnblogs.com/mysic/p/4872383.html
Copyright © 2011-2022 走看看