对象比较
2022-10-19 08:56:43内容摘要
对象比较,PHP5中的对象比较(object comparison)要比PHP4中复杂,也比其它一般的面向对象语言复杂。当使用对比操作符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
文章正文
对象比较
PHP5中的对象比较(object comparison)要比PHP4中复杂,也比其它一般的面向对象语言复杂。
当使用对比操作符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
而如果使用全等操作符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
通过下面的示例你可以理解以上原则。
Example #1 PHP 5的对象比较
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <code><?php function bool2str( $bool ) { if ( $bool === false) { return 'FALSE' ; } else { return 'TRUE' ; } } function compareObjects(& $o1 , & $o2 ) { echo 'o1 == o2 : ' . bool2str( $o1 == $o2 ) . " " ; echo 'o1 != o2 : ' . bool2str( $o1 != $o2 ) . " " ; echo 'o1 === o2 : ' . bool2str( $o1 === $o2 ) . " " ; echo 'o1 !== o2 : ' . bool2str( $o1 !== $o2 ) . " " ; } class Flag { public $flag ; function Flag( $flag = true) { $this ->flag = $flag ; } } class OtherFlag { public $flag ; function OtherFlag( $flag = true) { $this ->flag = $flag ; } } $o = new Flag(); $p = new Flag(); $q = $o ; $r = new OtherFlag(); echo "Two instances of the same class " ; compareObjects( $o , $p ); echo " Two references to the same instance " ; compareObjects( $o , $q ); echo " Instances of two different classes " ; compareObjects( $o , $r ); ?></code> |
以上例程会输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Two instances of the same class o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE Two references to the same instance o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE Instances of two different classes o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE |
Note:
PHP扩展中可以自行定义对象比较的原则。
代码注释