PHP对象赋值给变量的两种方式的区别,一般赋值和引用赋值?

class Person {
public $name;
protected $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}

$lh = new Person('刘慧', 23);
$a = $lh;
$b =& $lh;
-------------------------------------------------------------------------
请问$a 和 $b的区别?可以从内存堆栈的角度的分析。

··

回复内容:

PHP里不需要加&引用符号。所有对象都是引用传递,除非显式调用clone $object泻药
===============
我忘了是从哪个版本开始,PHP里不需要加&引用符号了。
加了会报一个语法错误,这个详细的解答呢,可以去问 @韩天峰 (他也回答了呢)。
亦或问问 @Laruence鸟叔这位大拿。
就酱基本类型的变量赋值,通常是真正的复制(理解为:2个指针,指向2块内存空间)。
$a = 100;$b = $a;unset($a);echo $b."\n";
有一些区别,在你的例子中,如果你给b赋值一个新的值,lh的指向也会跟着改变,但是a不会有这个问题。

PHP手册中对引用的说法是:

Note:

$a and $b are completely equal here. $a is not pointing to $b or vice versa. $a and $b are pointing to the same place.


对PHP5中对象和引用的说法是:


A PHP reference is an alias, which allows two different variables to write to the same value. As of PHP 5, an object variable doesn't contain the object itself as value anymore. It only contains an object identifier which allows object accessors to find the actual object. When an object is sent by argument, returned or assigned to another variable, the different variables are not aliases: they hold a copy of the identifier, which points to the same object.


其实对对象变量取&更像是一个指向“指针”的指针。

@李怀志我也记得PHP里不需要加&引用符号,都是引用传递。但是经过我的测试(PHP5.6.7),我对以下内容存在疑惑:
class Person {  public $name = 'myName';}$obj = new Person;$assign = $obj;$reference = & $obj;$obj = null;//此操作很重要var_dump($obj);//得到nullvar_dump($assign);//得到object(Person)#1 (1) {["name"]=>string(6) "myName"}var_dump($reference);//得到null
百度一下完全一样

郑重声明:本文版权包含图片归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(delete@yzlfxy.com)修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
昵称:
匿名发表
   
验证码: