PHP 比较对象


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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的对象:

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

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

1
2
3
4
5
6
7
8
9
$p1 = new Point(5,20);
$p2 = new Point(5,20);
 
if(Point::compare($p1, $p2)){
echo 'p1 和 p2 相等 <br/>';
}
else{
echo 'p1 和 p2 不等 <br/>';
}

输出:

1
p1 和 p2 相等

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

1
2
3
4
5
6
7
$p3 = $p2;
if(Point::compare($p2, $p3)){
echo 'p2 和 p3 相等 <br/>';
}
else{
echo 'p2 和 p3 不等 <br/>';
}

p2 和 p3 也是相等的。

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

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

输出:

1
p3 和 p4 不等

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

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

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

1
2
3
4
5
6
7
8
9
<?php
$p1 = new Point(10,35);
$p2 = $p1;
 
if($p1 === $p2){
echo '$p1 和 $p2 全等';
}else{
echo '$p1 和 $p2 不全等';
}

输出:

1
$p1 和 $p2 全等

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

1
2
3
4
5
6
7
$p3 = new Point(10,35);
 
if($p1 === $p3){
echo '$p1 和 $p3 全等';
}else{
echo '$p1 和 $p3 不全等';
}

输出:

1
$p1 和 $p3 不全等


原文链接:https://codingdict.com/