标签:
在PHP中对象类型和简单变量类型表现可以说是大相径庭,很多数据类型都要可以在写时进行复制,如当写代码$a=$b时,两个变量因为赋予相同的值而告终。所以需要注意的是,这种情况用在对象时就会完全不同了。
我们来看看下面的代码,你期望输出什么值呢?
01 | <?php |
02 | class Person{ |
03 | |
04 | public $name = "张三" ; |
05 | public function say(){ |
06 | echo "我叫" . $this ->name . "<br>" ; |
07 | } |
08 | } |
09 | $Person = new Person(); |
10 | $Person ->name= "李四" ; |
11 | $Person1 = $Person ; |
12 | $Person1 -> name= "王五" ; |
13 | $Person ->say(); |
14 | $Person1 ->say(); |
上面的程序出输:
我叫王五
我叫王五
我们来看一下为什么会得出这样的结果。当将$Person赋值给$Person1时,并没有复制$Person的内容。相反,PHP使用了另一种方式将$Person1指向同一个对象。这种方式就是PHP的对象引用。PHP 的对象的引用接近指针,它储存着该对象的一个“标识符”(类似地址),传递对象时是在拷贝这个标识符,而不是内容。
要想知道对象$Person和$Person1是否拥有相同的类和属性,可以通过使用“==”操作符来比较这两个对象。代码如下(承接上面的代码):
1 | if ( $Person == $Person1 ){ |
2 | echo "Person和Person1具有相同的类和属性" ; |
3 | } else { |
4 | return false; |
5 | } |
程序输出:Person和Person1具有相同的类和属性
要想知道对象$Person和$Person1是否拥有相同的类和属性,并且存储在相同的位置,可以通过使用“===”操作符来比较这两个对象。代码如下:
1 | if ( $Person === $Person1 ){ |
2 | echo "Person和Person1具有相同的类和属性且存储在相同的位置" ; |
3 | } else { |
4 | return false ; |
5 | } |
程序输出:Person和Person1具有相同的类和属性且存储在相同的位置
最后,如果我们希望把对象$Person的内容复制给$Person1,可以使用克隆,如$Person1=clone $Person
标签:
原文地址:http://www.cnblogs.com/zhouguowei/p/5179069.html