黑马程序员技术交流社区
标题:
【上海校区】php的引用符号&用法
[打印本页]
作者:
梦缠绕的时候
时间:
2018-12-21 10:35
标题:
【上海校区】php的引用符号&用法
$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
* */
?>
作者:
不二晨
时间:
2018-12-26 10:02
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2