加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中的对象比较

发布时间:2020-12-13 17:30:09 所属栏目:PHP教程 来源:网络整理
导读:所以, 问题 它并不为人所熟知,但PHP允许比较对象 – 而不仅仅是等于== – 而是在和太.但是 – 它是如何工作的?因此,如果我想创建类似的对象 – 他们应遵循哪些限制/规则? 最有用的情况是 DateTime() 对象 – 它们具有一定的时间戳并且可以进行比较(这具有
所以,

问题

它并不为人所熟知,但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<$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的来源之外,没什么可说的了.

没有记录通常是“不依赖它”的同义词.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读