A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  • $a='CC';
  • $b=$a;//$a和$b指向同一内存地址
  • $a='DD';
  • echo $b;
  • /*
  • php中对于地址的指向(类似指针)功能不是由用户自己来实现的,
  • 是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,
  • 就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。
  • 当$a='DD';
  • 由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断
  • 自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。
  • * */
  • echo '
    ';
  • $c='ABC';
  • $d=&$c;//$b指向$a的内存地址,传地址赋值
  • $d='E';
  • echo $c;
  • /**
  • CC
  • --------------------------------------------------------------------------------
  • E
  • * */
  • ?>
  • //函数的引用返回
  • function &test()
  • {
  • static $b=0;//申明一个静态变量
  • $b=$b+1;
  • echo '$b='.$b;
  • echo '
    ';
  • return $b;
  • }
  • $a=test();
  • echo '$a='.$a;//这里不是函数的引用返回,跟普通的函数调用没有区别
  • $a=&test();  //这种方式才是函数的引用返回。
  • //至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。)
  • //用在这里意思就是test()被绑定在$a上了。
  • echo '$a='.$a;
  • $a=6;
  • test();//这条语句会输出$b的值 为7
  • echo '$a='.$a;
  • /*
  • $b=1
  • $a=1$b=2
  • $a=2$b=7
  • $a=7
  • * */
  • ?>
  • //引用传递
  • function printArray(&$arr){
  •      //echo count($arr);
  •      array_pop($arr);
  •      echo count($arr);
  • }
  • //值传递
  • function printArray2($arr){
  •      //echo count($arr);
  •      array_pop($arr);
  •      echo count($arr);
  • }
  • $a=array(1,2,3);
  • $b=$a;
  • //$b=&$a;
  • printArray($a);
  • print_r($b);
  • print_r($a);
  • echo '
    ';
  • printArray($a);
  • print_r($b);
  • print_r($a);
  • /**
  •   2Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 [1] => 2 )
  • --------------------------------------------------------------------------------
  • 1Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 )
  •   * */
  • ?>
  • //对象的引用
  • class a{
  • var $name="ABC";
  • }
  • $b=new a;
  • $c=$b;
  • echo '$b->name='.$b->name;//这里输出ABC
  • echo '
    ';
  • echo '$c->name='.$c->name;//这里输出ABC
  • echo '
    ';
  • $b->name="DEF";
  • echo '$b->name='.$b->name;
  • echo '
    ';
  • echo '$c->name='.$c->name;
  • echo '
    ';
  • /*
  • 在PHP5中 对象的复制 是通过引用来实现的。
  • 上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b;
  • PHP5中默认就是通过引用来调用对象,
  • 但有时你可能想建立一个对象的副本,
  • 并希望原来的对象的改变不影响到副本 .
  • 为了这样的目的,PHP定义了一个特殊的方法,称为__clone.
  • * */
  • $x=new a;
  • $y=clone $x;
  • $x->name='XXX';
  • echo '$x->name='.$x->name;
  • echo '
    ';
  • echo '$y->name='.$y->name;
  • /*
  •   $b->name=ABC
  • $c->name=ABC
  • $b->name=DEF
  • $c->name=DEF
  • --------------------------------------------------------------------------------
  • $x->name=XXX
  • $y->name=ABC
  •   * */
  • ?>

1 个回复

正序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马