PHP 比较对象

时间:2018-11-15 15:14:20  来源:igfitidea点击:

在本教程中,我们将学习如何使用比较操作符(==)和全等操作符(===)来比较PHP中的对象。

让我们创建一个新类来进行演示。

<?php
class Point{
    private $x;
    private $y;
    
    public function __construct($x,$y){
        $this->x = $x;
        $this->y = $y;
    }
    
    public function setX($x){
        $this->x = $x;
    }

    public function getX(){
        return $this->x;
    }
    
    public function setY($y){
        $this->y = $y;
    }
    public function getY(){
        return $this->y;
    }
}

Point类有两个属性:$x坐标和$y坐标。

使用比较操作符(==)比较对象

当我们使用比较运算符(==)比较对象时,如果两个对象是同一个类的实例,并且具有相同的属性和值,那么它们就是相等的。

让我们添加一个静态方法来比较两个Point的对象:

/**
 * 比较两个点
 * @param Point $p1
 * @param Point $p2
 * @return boolean 如果两个点相等,则返回true,否则返回false
 */
public static function compare($p1,$p2){
 return $p1 == $p2;
}

现在,我们创建两个具有相同属性值的新对象,并对它们进行比较:

$p1 = new Point(5,20);
$p2 = new Point(5,20);
 
if(Point::compare($p1, $p2)){
 echo 'p1 和 p2 相等 <br/>';
}
else{
 echo 'p1 和 p2 不等 <br/>';
}

输出:

p1 和 p2 相等 

我们可以将$p2分配给一个新的引用$p3, $p2和$p3都指向同一个对象。

$p3 = $p2;
if(Point::compare($p2, $p3)){
 echo 'p2 和 p3 相等 <br/>';
}
else{
 echo 'p2 和 p3 不等 <br/>';
}

p2 和 p3 也是相等的。

现在我们可以用不同的属性值创建一个新的point对象,并将其与$p3进行比较:

$p4 = new Point(15,10);
if(Point::compare($p3, $p4)){
 echo 'p3 和 p4 相等 <br/>';
}
else{
 echo 'p3 和 p4 不等 <br/>';
}

输出:

p3 和 p4 不等

使用全等操作符比较对象(===)

当您使用全等操作符比较对象时,当且仅当它们都引用同一个类实例时,它们才是相同的。

当我们使用全等操作符(===)进行比较时,下面的$p1和$p2对象是相同的,因为它们都引用同一个对象。

<?php 
$p1 = new Point(10,35);
$p2 = $p1;
 
if($p1 === $p2){
    echo '$p1 和 $p2 全等';
}else{
    echo '$p1 和 $p2 不全等';
}

输出:

$p1 和 $p2 全等

然而,下面的$p3对象并不等同于$p1,即使它们的属性值是相等的。

$p3 = new Point(10,35);
 
if($p1 === $p3){
    echo '$p1 和 $p3 全等';
}else{
    echo '$p1 和 $p3 不全等';
}

输出:

$p1 和 $p3 不全等