Синтаксическая ошибка, неожиданный «Интерфейс» (T_INTERFACE), ожидание идентификатора (T_STRING)

У меня есть код PHP (7.1) ниже. После выполнения этого кода я получаю следующую ошибку:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный «Интерфейс» (T_INTERFACE), ожидание идентификатора (T_STRING) или функции (T_FUNCTION) или константы (T_CONST) или \ (T_NS_SEPARATOR) в вашем коде в строке 7.

<?php

declare(strict_types=1);

namespace CommandBus\Handler;

use Interface\{
    Parser\ZipFilenameParserInterface,
    Query\UpdateLettersQueryInterface,
};

final class ZipFileGeneratorCommandHandler
{
    // the rest of the code
}

Гугление мало помогло. Я не мог использовать

stackoverflow.com/questions/44219644/… может помочь. Кроме того, PHP 7.1 ужасно устарел, и я надеюсь, что вы не будете использовать его ни в одной производственной системе.
Nico Haase 30.03.2023 12:45
I couldn't ChatGPT this thing.... в любом случае это не поисковая система и не консультант по знаниям, так что я бы не беспокоился. Он может говорить с вами, но нет гарантии, что он скажет что-то правильное. Его цель состоит в том, чтобы иметь возможность вести разговор, который звучит лингвистически связно и реалистично, а не предоставлять точную информацию. (То же самое относится к любому программному коду, который он генерирует... он может создавать вещи, которые выглядят так, как будто PHP-код выполняет определенную задачу, основываясь на других примерах PHP-кода, которые он видел... но это часто будет неправильным или нелогичным (возможно, очень тонко)
ADyson 30.03.2023 12:47

В любом случае проблема в том, что интерфейс является зарезервированным словом, вы не можете использовать его как пространство имен.

ADyson 30.03.2023 12:48

Из любопытства, почему стало тенденцией упоминать, что ChatGPT не решил проблему? Он не добавляет никакой полезной информации к вопросам и как бы дает тон «неохотно спрашивать здесь». Что касается вашего вопроса, я думаю, вы нашли пограничный случай в анализаторе языка PHP. Interface работает, если вы по-разному разделяете сгруппированное пространство имен.

Álvaro González 30.03.2023 12:49

@ADyson и Нико Хаасе - «Интерфейс» - это зарезервированное слово. Спасибо ребята!

Salim Ibrohimi 30.03.2023 12:51

@ ÁlvaroGonzález удручающе, я подозреваю, что некоторые люди решили, что «спросите чат-бота» - это достойная замена проведению некоторых реальных исследований.

ADyson 30.03.2023 12:52

@ ÁlvaroGonzález - да, об этом. Некоторые люди в Интернете предлагают спросить ChatGPT, поэтому я хотел ответить им, прежде чем они даже предложат это мне :)

Salim Ibrohimi 30.03.2023 12:54
Some folks on the Internet... Я бы не обращал особого внимания на этих людей. Я имею в виду, что это один из вариантов, который вы можете рассмотреть в рамках своего исследования, но вам не нужно рассматривать его конкретно. Stackoverflow ожидает, что вы проведете достаточное количество исследований, прежде чем спрашивать (согласно Как спросить), но не указывает, как вы это делаете. Если вы что-то пробовали, конечно, нас это интересует, и нас может в конечном итоге заинтересовать источник информации, но здесь нет особого требования искать конкретно через чат-ботов.
ADyson 30.03.2023 12:57

@ ÁlvaroGonzález, вы не думаете, что это дубликат stackoverflow.com/questions/44219644/…, тогда?

ADyson 30.03.2023 12:57

@ADyson Нет, если я правильно прочитал документацию. Возможно, руководство изменилось с тех пор, как был дан ответ на этот другой вопрос, я не знаю.

Álvaro González 30.03.2023 12:59

@NicoHaase - да, версия 7.1 устарела. Планирую перейти на версию 8.0.

Salim Ibrohimi 30.03.2023 13:02

Пожалуйста, планируйте переход на версию, которая получает дополнительную поддержку — 8.0 прекратила активную поддержку несколько месяцев назад, а поддержка безопасности прекратится в ноябре 2023 года.

Nico Haase 30.03.2023 13:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
12
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мои извинения, это действительно задокументированное поведение, просто его нет в руководстве: см.


Возможно, вы нашли угловой случай в парсере языка PHP. Interface в ключевом слове PHP. Но это явно не указано в списке разрешенных/запрещенных использований:

Следующие слова нельзя использовать в качестве констант, имен классов или имен функций. Однако они разрешены в качестве имен свойств, констант и методов классов, интерфейсов и трейтов, за исключением того, что класс не может использоваться в качестве имени константы.

Они действительны:

use NotInterface\{
    Parser\ZipFilenameParserInterface,
    Query\UpdateLettersQueryInterface,
};

Демо

use Interface\Parser\ZipFilenameParserInterface;
use Interface\Query\UpdateLettersQueryInterface;

Демо

Это не:

use Interface\{
    Parser\ZipFilenameParserInterface,
    Query\UpdateLettersQueryInterface,
};

Демо

NotInterface работает, а use Interface\Parser\ZipFilenameParserInterface; нет.

Salim Ibrohimi 30.03.2023 13:01

@SalimIbrohimi Он начал работать на PHP/8.0: 3v4l.org/muvKM - Как говорится, это неизведанная территория :)

Álvaro González 30.03.2023 13:04

Я изменил Interface на Interfaces, так что теперь все работает нормально. Мне кажется, что этот ответ: stackoverflow.com/questions/44219644/… отвечает на мой вопрос.

Salim Ibrohimi 30.03.2023 13:05

Вы правы, кто-то только что добавил ответ на это.

Álvaro González 30.03.2023 13:07

Возможно, сообщение об ошибке можно было бы улучшить. Но это другая история.

Salim Ibrohimi 30.03.2023 13:09

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