я обычно использую array для хранения, а в class Product указываю анотации что я там храню
например
class Product
{
/**
* @var Path[]
*/
private $someProperty
/**
* @var AnotherClass[]
*/
private $someProperty2
}
тогда имею в ide автокомлит например внутри циклов
Также для хренения коллекций есть SPL
php.net/manual/ru/book.spl.php соответственно можно выбрать структуру данных и раньше даже было преимущество в скорости но сейчас бенчмарков нет и сказать наперед сложно, и проблема с автокомлитом в ide будет так как нет поддержки generic.