SplObjectStorage сопоставляет только экземпляры

Моя проблема заключается в том, что я хочу отобразить объектное равенство (==), а не уникальные экземпляры. Другими словами, рефакторинг это, чтобы не выдать ошибку и вернуть сопоставленное значение:

$var1 = (object) [1,2,10];
$var2 = (object) [1,2,10];
$objmap = new SplObjectStorage();
$objmap[$var1] = "mapped value here";
echo $objmap[$var2];

Редактировать: Кроме того, если мне в конечном итоге потребуется перебирать ключи объекта SplObjectStorage, чтобы получить равенство, я бы вместо этого хотел бы найти хороший способ просто хешировать объекты / массивы и просто отображать их в хэши.

1 ответ

Решение

Я бы реализовал функцию хеширования для содержимого объекта; что-то простое, как это:

function getHash($obj)
{
    return md5(serialize($obj));
}

$objmap = array();
$objmap[getHash($var1)] = "mapped value here";
echo $objmap[getHash($var2)];
Другие вопросы по тегам