Синтаксическая ошибка в коде
В предыдущей части мы рассмотрели исходный код и его составляющие.
После того, как вы начнете проверять фрагменты кода или попытаетесь решить связанные с ним проблемы, вы очень скоро поймете, что существуют моменты, когда программа крашится, прерывается и прекращает работу.
Это часто вызвано ошибками, известными как дефекты или исключительные ситуации во время выполнения. Акт обнаружения и удаления ошибок из нашего кода – это отладка программы. Вы лучше разберетесь в отладке на практике, используя ее как можно чаще. Мы не только отлаживаем собственный код, но и порой дебажим написанное другими программистами.
Для начала необходимо рассортировать общие ошибки, которые могут возникнуть в исходном коде.
Синтаксические ошибки
Эти эрроры не позволяют скомпилировать исходный код на компилируемых языках программирования. Они обнаруживаются во время компиляции или интерпретации исходного кода. Они также могут быть легко обнаружены статическими анализаторами (линтами). Подробнее о линтах мы узнаем немного позже.
Синтаксические ошибки в основном вызваны нарушением ожидаемой формы или структуры языка, на котором пишется программа. Как пример, это может быть отсутствующая закрывающая скобка в уравнении.
Семантические ошибки
Отладка программы может потребоваться и по причине семантических ошибок, также известных как логические. Они являются наиболее сложными из всех, потому что не могут быть легко обнаружены. Признак того, что существует семантическая ошибка, – это когда программа запускается, отрабатывает, но не дает желаемого результата.
Рассмотрим данный пример:
По порядку приоритета, называемому старшинством операции, с учетом математических правил мы ожидаем, что сначала будет оценена часть умножения, и окончательный результат будет равен 33. Если программист хотел, чтобы сначала происходило добавление двух чисел, следовало поступить иначе. Для этого используются круглые скобки, которые отвечают за смещение приоритетов в математической формуле. Исправленный пример должен выглядеть так:
3 + 5, заключенные в скобки, дадут желаемый результат, а именно 48.
Ошибки в процессе выполнения
Как и семантические, ошибки во время выполнения никогда не обнаруживаются при компиляции. В отличие от семантических ошибок, эти прерывают программу и препятствуют ее дальнейшему выполнению. Они обычно вызваны неожиданным результатом некоторых вычислений в исходном коде.
Вот хороший пример:
Фрагмент кода выше будет скомпилирован успешно, но input 25 приведет к ZeroDivisionError. Это ошибка во время выполнения. Другим популярным примером является StackOverflowError или IndexOutofBoundError. Важно то, что вы идентифицируете эти ошибки и узнаете, как с ними бороться.
Существуют ошибки, связанные с тем, как ваш исходный код использует память и пространство на платформе или в среде, в которой он запущен. Они также являются ошибками во время выполнения. Такие ошибки, как OutOfMemoryErrorand и HeapError обычно вызваны тем, что ваш исходный код использует слишком много ресурсов. Хорошее знание алгоритмов поможет написать код, который лучше использует ресурсы. В этом и заключается отладка программы.
Процесс перезаписи кода для повышения производительности называется оптимизацией. Менее популярное наименование процесса – рефакторинг. Поскольку вы тратите больше времени на кодинг, то должны иметь это в виду.
Отладка программы
Вот несколько советов о том, как правильно выполнять отладку:
Двигаемся дальше
Поздравляем! Слово «ошибка» уже привычно для вас, равно как и «отладка программы». В качестве новичка вы можете изучать кодинг по книгам, онлайн-урокам или видео. И даже чужой код вам теперь не страшен 
В процессе кодинга измените что-нибудь, чтобы понять, как он работает. Но будьте уверены в том, что сами написали.
Ошибки синтаксиса PHP / синтаксиса; и как их решить?
Неожиданный символ не всегда является настоящим преступником. Но номер строки дает приблизительное представление о том, где начать искать.
В то время как Stack Overflow также приветствует новичков-кодеров, он в основном нацелен на профессиональные вопросы программирования.
Синтаксические ошибки, возникающие в коде поставщика: Наконец, рассмотрим, что display_errors = 1 ошибка синтаксиса не была повышена путем редактирования вашей кодовой базы, но после установки или обновления пакета внешнего поставщика это может быть связано с несовместимостью версии PHP, поэтому проверьте требования поставщика к вашему платформы.
Ответов: 14
Синтаксические ошибки, возникающие в коде поставщика: Наконец, рассмотрим, что display_errors = 1 ошибка синтаксиса не была повышена путем редактирования вашей кодовой базы, но после установки или обновления пакета внешнего поставщика это может быть связано с несовместимостью версии PHP, поэтому проверьте требования поставщика к вашему платформы.
Каковы синтаксические ошибки?
Существует множество подходов к сужению и исправлению синтаксических икота.
Для убегающих строк и неуместных операторов это обычно означает, что вы находите виновника.
Прочитайте строку слева направо и представьте, что делает каждый символ.
В частности, отсутствующие test. php точки с запятой отсутствуют в предыдущей строке end / statement. (По крайней мере, с стилистической точки зрения.)
Строки, переменные и константы должны иметь цвета с ошибкой.
Операторы также [ должны быть тонированы. [они могут быть в неправильном контексте.
Если вы видите, что раскраска строк слишком длинная или слишком короткая, вы обнаружите скрытый или отсутствующий заголовок » или ‘ маркер строки.
Временно разбить длинные линии.
Вы можете свободно добавлять новые строки между операторами или константами и строками. Затем анализатор конкретизирует номер строки для ошибок синтаксического анализа. Вместо того, чтобы смотреть на очень длинный код, вы можете выделить отсутствующий или неуместный синтаксический символ.
Разделение сложных if операторов на отдельные или вложенные if условия.
Вместо длинных математических формул или логических цепей используйте временные переменные для упрощения кода. (Более читаемый = меньше ошибок.)
Добавьте новые строки между:
Разделение длинных блоков кода действительно помогает найти происхождение ошибок синтаксиса.
Прокомментируйте код нарушения.
Если вы не можете изолировать источник проблемы, начните комментировать (и тем самым временно удалить) блоки кода.
Как только вы избавитесь от ошибки синтаксического анализа, вы обнаружили источник проблем. Посмотрите внимательно.
Иногда вы хотите временно удалить полные блоки функций / методов. (В случае непревзойденных фигурных скобок и кода с неправильным отступом).
Как новичок, избегайте некоторых запутанных конструкций синтаксиса.
Наиболее распространенными ошибками новичка являются:
Отсутствуют точки с запятой [ для завершающих операторов / строк.
Неисправные строковые кавычки для » или или без ‘ кавычек внутри.
Не забывайте, что решение одной проблемы синтаксиса может выявить следующее.
Если вы делаете одну проблему, уходите, а другие появляются в некотором коде ниже, вы в основном находитесь на правильном пути.
Если после редактирования новая синтаксическая ошибка возникает в той же строке, ваше попытка изменения может быть неудачной. (Не всегда, хотя.)
Восстановите резервную копию ранее работающего кода, если вы не можете его исправить.
Невидимые бродячие символы Unicode : в некоторых случаях вам нужно использовать hexeditor или другой редактор / просмотрщик на вашем источнике. Некоторые проблемы не могут быть найдены только с точки зрения вашего кода.
Попробуйте < в качестве первой меры найти символы, отличные от ASCII.
В частности, спецификации, пробелы нулевой ширины или неразрывные пробелы, а также умные кавычки регулярно могут найти свой путь в исходный код.
Позаботьтесь о том, какие типы строк будут сохранены в файлах.
PHP просто чтит новые строки, а не возврат каретки.
Иногда это проблема для пользователей MacOS (даже для ОС (X для неправильно настроенных редакторов).
Если ваша синтаксическая ошибка не передается через Интернет : бывает, что на вашем компьютере есть синтаксическая ошибка. Но публикация того же файла в Интернете больше не демонстрирует его. Что может означать только одно из двух:
Вы смотрите на неправильный файл!
Или ваш код содержит невидимый бездомный Unicode (см. Выше). Вы можете легко узнать: просто скопируйте свой код из веб-формы в текстовый редактор.
Не используйте зарезервированные ключевые слова PHP как идентификаторы для функций / методов, классов или констант.
Если все остальное не удается, вы всегда можете отправить сообщение об ошибке. Символы синтаксиса не так легко найти (Stack Overflow сам индексируется SymbolHound, хотя). Поэтому перед тем, как найти что-то важное, вы можете просмотреть еще несколько страниц.
Белый экран смерти
Вы (эффективно) никогда не столкнетесь с синтаксическими ошибками снова, просто потому, что видите их правильно по мере ввода. Шутки в сторону.
Отличные IDE с проверкой синтаксиса (все они доступны для Linux, Windows и Mac):
непредвиденный [
Функция разыменования функции массива также недоступна для старых версий PHP:
Кстати, есть также препроцессоры и синтаксические понижающие преобразователи PHP 5.4, если вы действительно цепляетесь за более старые и медленные версии PHP.
Другие причины неожиданных [ синтаксических ошибок
Если это не рассогласование PHP-версии, то это часто случается с синтаксической ошибкой опечатки или новичка:
Или пытаемся разыменовать константы (до PHP 5.6) как массивы:
По крайней мере PHP интерпретирует это const как постоянное имя.
Неожиданная ] закрывающая квадратная скобка
«Неожиданное T_VARIABLE » означает, что существует буквальное if имя, которое не вписывается в текущую структуру выражений / операторов.
Отсутствует точка с запятой
Неверная переменная интерполяция
И это чаще всего встречается при некорректной интерполяции переменных PHP:
Точнее, это справедливо для использования простого синтаксиса в стиле PHP2 в двойных кавычках для ссылок на массивы:
Вложенные массивы или более глубокие ссылки на объекты, однако, требуют синтаксиса сложного фигурного синтаксиса:
Если вы не уверены, это обычно безопаснее использовать. Его часто считают более читаемым. И лучшие IDE на самом деле используют для этого разную синтаксическую раскраску.
Отсутствует конкатенация
Если строка следует за выражением, но не имеет конкатенации или другого оператора, то вы увидите, что PHP жалуется на строковый литерал:
Сбивающие с толку строковые кавычки
Этот пример начинался с двойных кавычек. Но двойные кавычки также предназначались для атрибутов HTML. Предполагаемый оператор конкатенации внутри, однако, интерпретировался как часть второй строки в одинарных кавычках.
Это хороший пример, когда вы не должны выходить из двойных кавычек в первую очередь. Вместо того, чтобы просто использовать правильные ‘ побеги для HTML атрибутов? кавычки:
Хотя это также может привести к путанице в синтаксисе, все лучшие IDE / редакторы снова помогают раскрасить экранированные кавычки по-разному.
Отсутствует стартовая цитата
Эквивалентно забыто открытие » / ‘ цитирует рецепт ошибок парсера:
Списки массивов
Обратите внимание, что в последней строке всегда может содержаться дополнительная запятая, но игнорировать одно между ними непростительно. Это трудно обнаружить без подсветки синтаксиса.
Списки параметров функции
Беглые строки
Общим вариантом являются довольно просто забытые терминаторы строк:
https://proglib. io/p/debugging/
https://moredez. ru/q/40010259/