对象比较

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扩展中可以自行定义对象比较的原则。

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!