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 ?
答案 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。