polyanin
@polyanin
Golang, PHP & Symfony developer

Как в типизированных свойствах задать массив типа?

Приветствую!
В PHP 7.4 появились типизированные свойства.
Допустим есть код
class Bar
{
    public Foo $prop;
}

Не могу понять, как сделать $prop массивом Foo, типа такого
class Bar
{
    public Foo[] $prop;
}
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Дженерики еще не подвезли, которые бы сделали это возможным
Используйте коллекции (из Симфони или Ларавел возьмите), если хотите, чтобы был некий контроль за типом, но и они, опять же, не будут полноценно контролировать тип элемента сами по себе.

class Bar
{
    /** @var ArrayCollection|Bar[] */
    public ArrayCollection $props;
}


Для решения вашей задачи нужен еще один виток развития языка :)

НЕсуществующий код!
class ArrayCollection<T>
{
    public getElement(): <T>;
    public addElement(<T> $element): void;
}

class Bar
{
    public ArrayCollection<Bar> $barCollection;
}


Единственное, можно свои коллекции прокачать на проверку типа при создании объекта этой коллекции
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@bkosun
Никак, но если это нужно для подсказок в IDE - можно указать в PHPDoc:

class Bar {

    /**
     * @var Foo[]
     */
    public array $prop = [];
}


https://wiki.php.net/rfc/generics
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы