Сравнение коллекции объектов - PullRequest
0 голосов
/ 10 июня 2018

Как можно определить, существуют ли данные объекты в двух массивах?Я собираюсь найти добавленные, удаленные и измененные объекты.

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

1 Ответ

0 голосов
/ 11 июня 2018

From: 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...