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)];