ParseError: синтаксическая ошибка, неожиданный EntityManagerInterface (T_STRING), ожидающая функция (T_FUNCTION) или const (T_CONST)

Этот код вызывает ошибку:

     /**
     * @var EntityManagerInterface
     */
    private EntityManagerInterface $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;

        parent::__construct();
    }

Мой composer.json использует

"php": ">=7.1.3",

И я использую Symfony 4.4, что является обязательным требованием для моей работы.

Где-то в Интернете я обнаружил, что этот тип ошибки вызван устаревшей версией php, но я не уверен, так ли это в данной конкретной ситуации. У меня вопрос, могу ли я написать код по-другому или единственный вариант - перейти на более высокую версию php?

Это Объявление типа. php.net/manual/en/language.types.declarations.php: «Объявления типа могут быть добавлены к аргументам функции, возвращаемым значениям, и, начиная с PHP 7.4.0, свойства класса».

CBroe 30.03.2021 14:03
«У меня вопрос, могу ли я написать код по-другому» - если это не код ваш, а исходит от какого-то внешнего компонента / фреймворка - тогда даже не пытайтесь. Обновите PHP до минимальной версии, необходимой для компонентов, которые вы собираетесь использовать, все остальное будет иметь очень мало смысла.
CBroe 30.03.2021 14:04

Спасибо за это объяснение, теперь оно имеет смысл для меня.

FDjawid 30.03.2021 14:41

Вы можете сказать об этом своему боссу и посмотреть, не сможет ли ваша команда выполнить обновление до PHP 7.4 или даже 8.0. Иногда возникают проблемы, препятствующие обновлению, но иногда это просто потому, что никто не подумал об этом.

Cerad 30.03.2021 14:51

Да, это хорошее предложение, спасибо.

FDjawid 30.03.2021 15:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
22
1

Ответы 1

Вам не нужно ставить

EntityManagerInterface

в объявлении переменной.

Итак, замените

private EntityManagerInterface $entityManager;

От

private $entityManager;

Его зависимость Injection уже добавлена ​​в параметры функции Constructor:

public function __construct(EntityManagerInterface $entityManager)

Спасибо, сэр, это сработало.

FDjawid 30.03.2021 14:08

@FDjawid, добро пожаловать !!!

Pupil 30.03.2021 14:10

Другие вопросы по теме