当前位置: 首页 > 后端技术 > PHP

PHP中的对象比较

时间:2023-03-29 23:23:44 PHP

在上一篇文章中,我们谈到了在PHP中比较数组时会发生什么?.这次我们来谈谈PHP在比较对象时是如何进行比较的。首先,我们按照PHP文档定义了对象比较的方法:同一个类的实例,比较属性大小,按照先后顺序,遇到不同的属性值后,比较返回,不同类的后续实例不会进行比较,会比较属性Value===,必须是同一个实例我们来看一个例子:functionbool2str($bool){if($bool===false){return'FALSE';}else{返回“真”;}}functioncompareObjects(&$o1,&$o2){echo'o1==o2:'.bool2str($o1==$o2)。"\n";回声'o1===o2:'。bool2str($o1===$o2)。"\n";}A类{private$t=true;公共函数setT($t){$this->t=$t;}}B类{受保护的$t=true;公共函数setT1($t){$this->t=$t;}}C类{私人$t=真;公共函数setT($t){$this->t=$t;}}$a1=newA();$a2=newA();compareObjects($a1,$a2);//同一个类//o1==o2:TRUE//o1===o2:FALSE$a11=$a1;比较对象($a1,$a11);//相同的实例//o1==o2:TRUE//o1===o2:TRUE$a11->setT(false);比较对象($a1,$a11);//相同的实例属性值不同//o1==o2:TRUE//o1===o2:TRUE$b=newB();compareObjects($a1,$b);//不同的类//o1==o2:FALSE//o1===o2:FALSE$c=newC();compareObjects($a1,$b);//属性相同,类不同//o1==o2:FALSE//o1===o2:FALSE从例子中我们可以看出,上面三个条件基本都满足了,但是需要注意的是在===的情况,如果是同一个Instance对象,不同的属性值会返回TRUE我们通过一个更复杂的例子来观察:$c=newstdClass();$d=newstdClass();$c->t1='c';$c->t2=10;$c->t3=50;$d->t1='c';$d->t2=11;$d->t3=40;echo'c>d:',$c>$d?'TRUE':'FALSE',PHP_EOL;//FALSEecho'ct2=10;//$t2属性更改为等于echo'c>d:',$c>$d?'TRUE':'FALSE',PHP_EOL;//TRUEecho'ct3=50;//$c,$d属性相等echo'c>=d:',$c>=$d?'TRUE':'FALSE',PHP_EOL;//TRUEecho'c<=d:',$c<=$d?'TRUE':'FALSE',PHP_EOL;//TRUEecho'c==d:',$c==$d?'TRUE':'FALSE',PHP_EOL;//TRUEecho'c===d:',$c===$d?'TRUE':'FALSE',PHP_EOL;//假$c1=克隆$c;//复制相同的对象echo'c==c1:',$c==$c1?'TRUE':'FALSE',PHP_EOL;//TRUEecho'c===c1:',$c===$c1?'TRUE':'FALSE',PHP_EOL;//假$c1->t4='f';//添加了一个属性echo'c>c1:',$c>$c1?'真假',PHP_EOL;//TRUEecho'ct4);$c1->t1='d';//修改了一个值echo'c==c1:',$c==$c1?'TRUE':'FALSE',PHP_EOL;//FALSEecho'c===c1:',$c===$c1?'TRUE':'FALSE',PHP_EOL;//在FALSE的例子中,我们比较了<和>,而在这个比较中,都是根据属性值进行比较,比较的顺序也是属性值的英文排序。当$t2的比较结果不相等时,$t3将不再进行比较。另外,clone之后的对象不是原来的实例对象,所以clone之后的对象和原来的对象不能用===得到相同的结果。当一个对象的属性多于另一个对象时,该对象也会比属性少的对象大。对象的比较其实和数组有些相似,但又略有不同。一个重要的方面是要把握他们会进行属性比较,还有===的区别,在数组中===必须是所有属性的同一类型,在对象中必须是同一个实例,并且该对象只要是同一个实例,使用===就不会关心其属性值的差异。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/PHP%E4%B8%AD%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%AF%94%E8%BE%83.php参考文档:https://www.php.net/manual/zh/language.oop5.object-comparison.php===========各媒体平台均可搜索【硬核项目经理】