【问题标题】:Comparing a collection of objects比较对象集合
【发布时间】:2018-11-20 02:44:37
【问题描述】:

如何确定给定对象是否存在于两个数组中?我的意图是找到添加的对象、删除的对象和更改的对象。

class Foo
{
    private $id, $backup;
    public $p1, $p2, $p3;
    public function __construct($id, $p1, $p2, $p3){
        $this->id=$id;
        $this->p1=$p1;
        $this->p2=$p2;
        $this->p3=$p3;
        $this->backup=[$p1, $p2, $p3];
    }
}

$collection1=[
    Foo(1,'a','aa','aaa'),
    Foo(2,'b','bb','bbb'),
    Foo(5,'c','cc','ccc'),
    Foo(9,'d','dd','ddd'),
];
$collection2=$arr1;

$collection1[]=Foo(9,'d','dd','ddd');
unset($collection1[2]);
$collection1[0]->p2='bla'; //Will modify both $collection1 and $collection2

【问题讨论】:

  • $arr1 是什么?那是 $collection1 吗?
  • @Progrock 是的,数组。我实际上会使用一个包含数组的类,但它基本上是一样的。

标签: php arrays object collections


【解决方案1】:

发件人:https://secure.php.net/manual/en/language.oop5.object-comparison.php

使用恒等运算符 (===) 时,对象变量是相同的 当且仅当它们引用同一个类的同一个实例。

<?php
class Foo
{
    public $bar;
    public function __construct($bar)
    {
        $this->bar = $bar;
    }
}

$one = [new Foo(1),new Foo(2),new Foo(3)];
$two = $one;

var_dump($one[0] === $two[1]);
var_dump($one[0] === $two[0]);

输出:

bool(false) bool(true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多