В зависимости от вашего USECASE, это может быть альтернативой данных решений, а также:
class A extends ArrayObject {}
Таким образом, все объекты в массиве будут доступны записи объекта и нотации массива, например,
$a = new A(array('foo' => 'bar'), 2); // the 2 enables object notation
echo $a->foo;
echo $a['foo'];
Как вы можете видеть в объявлении класса, ArrayObject реализует ряд интерфейсов, которые позволяют использовать класс как массив:
Class [ <internal:SPL> <iterateable> class ArrayObject
implements IteratorAggregate, Traversable, ArrayAccess, Countable ]
Он также добавляет ряд методов для завершения массива возможности доступа. Как сказано в начале, это может быть нежелательно в вашем UseCase, например. когда вы не хотите, чтобы класс вел себя как массив.