首页 > 代码库 > php 对象的一些特性
php 对象的一些特性
class person{ private $name; private $age = 2; public function __construct($name,$age) { $this->name = $name; $this->age = $age; }}$p1 = new person(‘gxw‘,12);$p2 = new person(‘gxw‘,12);if($p1 == $p2){ echo "p1 == p2";}else{ echo "p1 != p2";} //echo p1 == p1if($p1 === $p2){ echo "p1 == p2";}else{ echo "p1 != p2";} //echo p1 != p2
‘== ’ 用于判断两个对象实例的所有属性是否都相等。
‘===’ 用于判断两个变量是否是同一个对象的引用。
$p3 = $p1;if($p3 === $p1){ echo ‘p3 == p1‘;}else{ echo ‘p3 != p1‘;}//echo ‘p3 == p1‘$p3->name = ‘www‘;if($p3 == $p1){ echo ‘p3 == p1‘;}else{ echo ‘p3 != p1‘;} //echo p3==p1
p3 为p1 的引用,更改p3同时影响到p1, 可以说p3为p1的浅拷贝。这种情况经常出现在函数传参
$p1 = new person(‘gxw‘,12);function change($tmp){ $tmp->name =‘tmp‘;}change($p1);echo $p1->name;//echo tmp$str = ‘hello‘;function zero($tmp){ $tmp = ‘‘;}zero($str);echo $str; //echo hello
可以看出php对函数传参进行过特殊处理,在传 类对象实例时,传得是引用。 而在传字符串类型及其他基础类型时,会先进行copy。
通过clone 关键字(注意是关键字,不是方法) 来进行对象的深拷贝
$p4 = clone $p1;$p4->name = ‘hello‘;if($p1 == $p4){ echo ‘p1 == p4‘;}else{ echo ‘p1 != p4‘;} //echo p1 != p4
看到p1 的name 并没有因为p4的name的改变而改变,说明p4 为p1的深拷贝.
我们还可以重载clone 方法,达到一些特定的复制效果。
php 对象的一些特性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。