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