所以,
问题
它并不为人所熟知,但PHP允许比较对象 – 而不仅仅是等于== – 而是在太.但是 – 它是如何工作的?因此,如果我想创建类似的对象 – 他们应遵循哪些限制/规则?
最有用的情况是DateTime()对象 – 它们具有一定的时间戳并且可以进行比较(这具有逻辑意义). lxr对DateTime有一些解释.但是常见的情况呢?
我有:
class C
{
protected $holder;
protected $mirror;
public function __construct($h = null)
{
$this->holder=$h;
$this->mirror=-1*$h;
}
}
$one = new C(1);
$two = new C(2);
//false, false, true: used $holder
var_dump($one>$two, $one==$two, $one
– 如果我将更改属性声明顺序,它将使用$mirror:
class C
{
//only order changed:
protected $mirror;
protected $holder;
public function __construct($h = null)
{
$this->holder=$h;
$this->mirror=-1*$h;
}
}
$one = new C(1);
$two = new C(2);
//true, false, false: used $mirror
var_dump($one>$two, $one==$two, $one
因此,似乎“规则”之一是它将使用第一个声明的属性.但是为什么它一直使用受保护的财产对我来说也不清楚.
现在,更复杂的样本:
class Test
{
protected $a;
protected $b;
function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
}
$x = new Test(1, 2);
$y = new Test(1, 3);
// true, false, false
var_dump($x < $y, $x == $y, $x > $y);
$x = new Test(3, 1);
$y = new Test(2, 1);
// false, false, true
var_dump($x < $y, $x == $y, $x > $y);
– 所以它将使用第一个不相等的属性进行比较.但上面的代码片段只是某些情况.我想确切地知道它是如何发生的以及为什么.从而,
题
是:它是如何工作的?我的意思是,更详细:
>我可以依赖事实,PHP将使用第一个不等于属性进行比较吗?
>如果属性数不相等,将会怎样做? (即某些属性在代码执行期间动态添加到实例)
>我可以将受保护/私有财产视为总是被计入这种比较吗?
等等. – 如果有一些额外的条件/限制/规则会影响结果 – 请发帖. Documentation仅表示== / ===比较.此外,比较不同类的实例是不可能的,因为它将返回false(显然).