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的来源之外,没什么可说的了.
没有记录通常是“不依赖它”的同义词. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |