PHP中的对象比较
|
所以,
问题 它并不为人所熟知,但PHP允许比较对象 – 而不仅仅是等于== – 而是在<和>太.但是 – 它是如何工作的?因此,如果我想创建类似的对象 – 他们应遵循哪些限制/规则? 最有用的情况是 我有: 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<$two);
– 如果我将更改属性声明顺序,它将使用$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: used $mirror
var_dump($one>$two,$one<$two);
因此,似乎“规则”之一是它将使用第一个声明的属性.但是为什么它一直使用受保护的财产对我来说也不清楚. 现在,更复杂的样本: 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
var_dump($x < $y,$x == $y,$x > $y);
$x = new Test(3,1);
$y = new Test(2,1);
// false,true
var_dump($x < $y,$x > $y);
– 所以它将使用第一个不相等的属性进行比较.但上面的代码片段只是某些情况.我想确切地知道它是如何发生的以及为什么.从而, 题 是:它是如何工作的?我的意思是,更详细: >我可以依赖事实,PHP将使用第一个不等于属性进行比较吗? 等等. – 如果有一些额外的条件/限制/规则会影响结果 – 请发帖. Documentation仅表示== / ===比较.此外,比较不同类的实例是不可能的,因为它将返回false(显然). 解决方法
PHP按顺序(按声明的顺序)比较对象属性,并在找到的第一个inequal属性处停止.这种行为没有记录,所以除了查看PHP的来源之外,没什么可说的了.
没有记录通常是“不依赖它”的同义词. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
