php 对象的一些特性

Posted 没离开过

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 == p1


if($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 对象的一些特性的主要内容,如果未能解决你的问题,请参考以下文章

超级有用的9个PHP代码片段

js代码片段

PHP类和对象之对象的高级特性

Java中面向对象的三大特性之封装

译ECMAScript 2016, 2017, 2018 新特性之必读篇

php面向对象特性