[关闭]
@Chiang 2020-01-08T11:30:07.000000Z 字数 1074 阅读 462

对象比较

PHP


  • PHP 5 中的对象比较要比 PHP 4 中复杂,所期望的结果更符合一个面向对象语言。
  • 当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
  • 而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
  • 通过下面的示例可以理解以上原则。
  1. <?php
  2. function bool2str($bool)
  3. {
  4. if ($bool === false) {
  5. return 'FALSE';
  6. } else {
  7. return 'TRUE';
  8. }
  9. }
  10. function compareObjects(&$o1, &$o2)
  11. {
  12. echo 'o1 == o2 : ' . bool2str($o1 == $o2) . "\n";
  13. echo 'o1 != o2 : ' . bool2str($o1 != $o2) . "\n";
  14. echo 'o1 === o2 : ' . bool2str($o1 === $o2) . "\n";
  15. echo 'o1 !== o2 : ' . bool2str($o1 !== $o2) . "\n";
  16. }
  17. class Flag
  18. {
  19. public $flag;
  20. function Flag($flag = true) {
  21. $this->flag = $flag;
  22. }
  23. }
  24. class OtherFlag
  25. {
  26. public $flag;
  27. function OtherFlag($flag = true) {
  28. $this->flag = $flag;
  29. }
  30. }
  31. $o = new Flag();
  32. $p = new Flag();
  33. $q = $o;
  34. $r = new OtherFlag();
  35. echo "Two instances of the same class\n";
  36. compareObjects($o, $p);
  37. echo "\nTwo references to the same instance\n";
  38. compareObjects($o, $q);
  39. echo "\nInstances of two different classes\n";
  40. compareObjects($o, $r);
  41. ?>
  42. 以上例程会输出:
  43. Two instances of the same class
  44. o1 == o2 : TRUE
  45. o1 != o2 : FALSE
  46. o1 === o2 : FALSE
  47. o1 !== o2 : TRUE
  48. Two references to the same instance
  49. o1 == o2 : TRUE
  50. o1 != o2 : FALSE
  51. o1 === o2 : TRUE
  52. o1 !== o2 : FALSE
  53. Instances of two different classes
  54. o1 == o2 : FALSE
  55. o1 != o2 : TRUE
  56. o1 === o2 : FALSE
  57. o1 !== o2 : TRUE
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注