首页 > php面向对象 > php的引用符号&用法

php的引用符号&用法

<?php
$a = 'CC';
$b = $a; //$a和$b指向同一内存地址
$a = 'DD';
echo $b;
/*
php中对于地址的指向(类似指针)功能不是由用户自己来实现的, 
是由Zend核心实现的,php中引用采用的是"写时拷贝"的原理, 
就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。 
当$a='DD'; 
由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断 
自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。 
* */
echo '<hr>';
$c = 'ABC';
$d = & $c; //$b指向$a的内存地址,传地址赋值
$d = 'E';
echo $c;
/** 
 CC
 --------------------------------------------------------------------------------
 E
 *
 */
?>
<?php
//函数的引用返回
function &test() {
    static $b = 0; //申明一个静态变量
    $b = $b + 1;
    echo '$b=' . $b;
    echo '<br>';
    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 
* */
?>
<?php
//引用传递
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 '<hr>';
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 )
 *
 */
?>
<?php
//对象的引用
class a {
    var $name = "ABC";
}
$b = new a;
$c = $b;
echo '$b->name=' . $b->name; //这里输出ABC
echo '<br>';
echo '$c->name=' . $c->name; //这里输出ABC
echo '<br>';
$b->name = "DEF";
echo '$b->name=' . $b->name;
echo '<br>';
echo '$c->name=' . $c->name;
echo '<hr>';
/*
在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 '<br>';
echo '$y->name=' . $y->name;
/*
  $b->name=ABC 
$c->name=ABC 
$b->name=DEF 
$c->name=DEF 
-------------------------------------------------------------------------------- 
$x->name=XXX 
$y->name=ABC 
  * */
?>


文章链接:http://www.phprm.com/mxdx/fs2985.html

随便收藏,请保留本文地址!

标签:php 引用符号 &用法

相关文章

发表留言