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 不全等

