Я хотел бы получить значения для набора значений:
>>> class Foo() {}
>>> $v = (object)[42];
>>> $a = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $b = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $data[$a] = 42;
>>> echo $data[$b]
42
Я пытался с SplObjectStorage
, но мне нужно преобразовать $a
в объект, и в этом случае $a != $b
, потому чтоэто разные экземпляры:
$s = new SplObjectStorage()
$s[$a] = 42
echo $s[$b]
UnexpectedValueException with message 'Object not found'
Как мне добиться этого в PHP?
В Python я бы использовал:
>>> a = (1, 1, 2, 3, 5, Foo, 'o_o', hashable_object)
>>> b = (1, 1, 2, 3, 5, Foo, 'o_o', hashable_object)
>>> data[a] = 42
>>> print(data[b])
42
РЕДАКТИРОВАТЬ
Одним не очень эффективным рабочим решением будет:
>>> class Foo() {}
>>> $v = (object)[42];
>>> $a = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $b = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $data[serialize($a)] = 42;
>>> echo $data[serialize($b)]
42