У меня есть код 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
}
Гугление мало помогло. Я не мог использовать
I couldn't ChatGPT this thing
.... в любом случае это не поисковая система и не консультант по знаниям, так что я бы не беспокоился. Он может говорить с вами, но нет гарантии, что он скажет что-то правильное. Его цель состоит в том, чтобы иметь возможность вести разговор, который звучит лингвистически связно и реалистично, а не предоставлять точную информацию. (То же самое относится к любому программному коду, который он генерирует... он может создавать вещи, которые выглядят так, как будто PHP-код выполняет определенную задачу, основываясь на других примерах PHP-кода, которые он видел... но это часто будет неправильным или нелогичным (возможно, очень тонко)
В любом случае проблема в том, что интерфейс является зарезервированным словом, вы не можете использовать его как пространство имен.
Из любопытства, почему стало тенденцией упоминать, что ChatGPT не решил проблему? Он не добавляет никакой полезной информации к вопросам и как бы дает тон «неохотно спрашивать здесь». Что касается вашего вопроса, я думаю, вы нашли пограничный случай в анализаторе языка PHP. Interface
работает, если вы по-разному разделяете сгруппированное пространство имен.
@ADyson и Нико Хаасе - «Интерфейс» - это зарезервированное слово. Спасибо ребята!
@ ÁlvaroGonzález удручающе, я подозреваю, что некоторые люди решили, что «спросите чат-бота» - это достойная замена проведению некоторых реальных исследований.
@ ÁlvaroGonzález - да, об этом. Некоторые люди в Интернете предлагают спросить ChatGPT, поэтому я хотел ответить им, прежде чем они даже предложат это мне :)
Some folks on the Internet
... Я бы не обращал особого внимания на этих людей. Я имею в виду, что это один из вариантов, который вы можете рассмотреть в рамках своего исследования, но вам не нужно рассматривать его конкретно. Stackoverflow ожидает, что вы проведете достаточное количество исследований, прежде чем спрашивать (согласно Как спросить), но не указывает, как вы это делаете. Если вы что-то пробовали, конечно, нас это интересует, и нас может в конечном итоге заинтересовать источник информации, но здесь нет особого требования искать конкретно через чат-ботов.
@ ÁlvaroGonzález, вы не думаете, что это дубликат stackoverflow.com/questions/44219644/…, тогда?
@ADyson Нет, если я правильно прочитал документацию. Возможно, руководство изменилось с тех пор, как был дан ответ на этот другой вопрос, я не знаю.
@NicoHaase - да, версия 7.1 устарела. Планирую перейти на версию 8.0.
Пожалуйста, планируйте переход на версию, которая получает дополнительную поддержку — 8.0 прекратила активную поддержку несколько месяцев назад, а поддержка безопасности прекратится в ноябре 2023 года.
Мои извинения, это действительно задокументированное поведение, просто его нет в руководстве: см.
Возможно, вы нашли угловой случай в парсере языка 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;
нет.
@SalimIbrohimi Он начал работать на PHP/8.0: 3v4l.org/muvKM - Как говорится, это неизведанная территория :)
Я изменил Interface
на Interfaces
, так что теперь все работает нормально. Мне кажется, что этот ответ: stackoverflow.com/questions/44219644/… отвечает на мой вопрос.
Вы правы, кто-то только что добавил ответ на это.
Возможно, сообщение об ошибке можно было бы улучшить. Но это другая история.