PHP如何比较实体

时间:2016-08-30 13:40:32

标签: php

PHP如何比较自定义实体?

e.g。

Class Foo {
    private $bar;

    public function __construct($bar)
    {
        $this->bar = $bar;
    }
}

$a = new Foo(12);
$b = new Foo('abc');

var_dump($a < $b);
var_dump($a == $b);
var_dump($a > $b);

是否有一个函数要在Foo中重写以修改&lt;,==和&gt;的comportement ?

1 个答案:

答案 0 :(得分:1)

关于comparing objects in PHP SPL,唯一有意义的比较是对象平等(=====)。这些行为就像你期望的那样;如果两个对象属于同一个类并且其属性具有相同的值,则==将为true。 ===只有在被比较的两个对象是同一个实例时才会成立。

没有内置的 Comparable 接口供您使用,或者魔术__compare方法会覆盖其他比较运算符的默认行为。但是,如果您愿意,可以创建自己的界面:

// From @vascowhite: http://stackoverflow.com/a/17008682/697370
interface Comparable 
{
/**
 * @param Comparable $other
 * @param String $comparison any of ==, <, >, =<, >=, etc
 * @return Bool true | false depending on result of comparison
 */
    public function compareTo(Comparable $other, $comparison);
}

目前正在讨论的PHP RFC&#39;关于PHP7(最后更新时间为2015-02-19),希望将一个Comparable接口引入SPL。