Я работаю над кодом для управления коллекцией уникальных объектов. Первый прототип этого кода использует ассоциативный массив, в основном так, как я всегда это делал.
Тем не менее, я также заинтересован в том, чтобы использовать функциональные возможности, которые были добавлены в более современные версии PHP, такие как [SplObjectStorage][1]
, вместо этого, отчасти в качестве учебного опыта, отчасти потому, что это обязательно дает преимущества (тесты, которые я видел, показывают, что SplObjectStorage
во многих случаях может быть быстрее, чем массивы).
Текущая реализация имеет ассоциативный массив, который я проверяю с помощью in_array()
, чтобы убедиться, что объект уже находится в массиве, прежде чем добавлять в него новый объект.
Большая проблема, которую я вижу с SplObjectStorage
, заключается в том, что он (на первый взгляд) не поддерживает поведение ассоциативного массива ключ/значение и может рассматриваться только как индексированный массив. Однако документация по новым возможностям PHP не соответствует стандартам документации по более устоявшимся частям языка, и я мог просто что-то упустить.
Могу ли я использовать SplObjectStorage
вместо ассоциативного массива? Если да, то как определить ключ при добавлении нового объекта? Что еще более важно, каковы относительные преимущества и недостатки SplObjectStorage
по сравнению с ассоциативными массивами?