PHP中文手册

版权信息

PHP 手册

入门指引

安装与配置

语言参考

安全

特点

函数参考

PHP 核心:骇客指南

FAQ

附录

对象比较

PHP 5 中的对象比较要比 PHP 4 中复杂,所期望的结果更符合一个面向对象语言。

当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。

而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。

通过下面的示例可以理解以上原则。

Example #1 PHP 5 的对象比较

<?php
function  bool2str ( $bool )
{
    if (
$bool  ===  false ) {
        return 
'FALSE' ;
    } else {
        return 
'TRUE' ;
    }
}

function 
compareObjects (& $o1 , & $o2 )
{
    echo 
'o1 == o2 : '  bool2str ( $o1  ==  $o2 ) .  "\n" ;
    echo 
'o1 != o2 : '  bool2str ( $o1  !=  $o2 ) .  "\n" ;
    echo 
'o1 === o2 : '  bool2str ( $o1  ===  $o2 ) .  "\n" ;
    echo 
'o1 !== o2 : '  bool2str ( $o1  !==  $o2 ) .  "\n" ;
}

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\n" ;
compareObjects ( $o $p );

echo 
"\nTwo references to the same instance\n" ;
compareObjects ( $o $q );

echo 
"\nInstances of two different classes\n" ;
compareObjects ( $o $r );
?>

以上例程会输出:

Two instances of the same class
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUETwo references to the same instance
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSEInstances of two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Note:

PHP 扩展中可以自行定义对象比较的原则。