HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Если программа на PHP написана синтаксически некорректно, то интерпретатор выводит на экран соответствующее сообщение, а также указание на файл и строчку в нем, где по его мнению произошла ошибка.</p>
1 <p>Если программа на PHP написана синтаксически некорректно, то интерпретатор выводит на экран соответствующее сообщение, а также указание на файл и строчку в нем, где по его мнению произошла ошибка.</p>
2 <p>В этом уроке мы научимся работать с ошибками.</p>
2 <p>В этом уроке мы научимся работать с ошибками.</p>
3 <p>Например,<strong>синтаксическая ошибка</strong>возникает, когда код был записан с нарушением грамматических правил. В человеческих языках грамматика важна, но текст с ошибками чаще всего можно понять и прочитать.</p>
3 <p>Например,<strong>синтаксическая ошибка</strong>возникает, когда код был записан с нарушением грамматических правил. В человеческих языках грамматика важна, но текст с ошибками чаще всего можно понять и прочитать.</p>
4 <p>А вот в программировании все строго. Любое мельчайшее нарушение - и программа даже не запустится. Примером может быть забытая ;, неправильно расставленные скобки и другие детали.</p>
4 <p>А вот в программировании все строго. Любое мельчайшее нарушение - и программа даже не запустится. Примером может быть забытая ;, неправильно расставленные скобки и другие детали.</p>
5 <p>Вот пример кода с синтаксической ошибкой:</p>
5 <p>Вот пример кода с синтаксической ошибкой:</p>
6 <p>Подобные синтаксические ошибки в PHP относятся к разряду<em>Parse error</em>. Как видно, в конце приводится путь до файла и номер строки.</p>
6 <p>Подобные синтаксические ошибки в PHP относятся к разряду<em>Parse error</em>. Как видно, в конце приводится путь до файла и номер строки.</p>
7 <p>С одной стороны, ошибки<em>Parse error</em>- самые простые, потому что они связаны исключительно с грамматическими правилами написания кода, а не с самим смыслом кода. Их легко исправить: нужно лишь найти нарушение в записи.</p>
7 <p>С одной стороны, ошибки<em>Parse error</em>- самые простые, потому что они связаны исключительно с грамматическими правилами написания кода, а не с самим смыслом кода. Их легко исправить: нужно лишь найти нарушение в записи.</p>
8 <p>С другой стороны, интерпретатор не всегда может четко указать на это нарушение. Поэтому бывает, что забытую скобку нужно поставить не туда, куда указывает сообщение об ошибке.</p>
8 <p>С другой стороны, интерпретатор не всегда может четко указать на это нарушение. Поэтому бывает, что забытую скобку нужно поставить не туда, куда указывает сообщение об ошибке.</p>
9 <h2>Уведомления и предупреждения</h2>
9 <h2>Уведомления и предупреждения</h2>
10 <p>В силу исторических причин PHP имеет непривычную систему ошибок.</p>
10 <p>В силу исторических причин PHP имеет непривычную систему ошибок.</p>
11 <p>В других аналогичных языках ошибки делятся на два типа:</p>
11 <p>В других аналогичных языках ошибки делятся на два типа:</p>
12 <ul><li>Ошибки парсинга</li>
12 <ul><li>Ошибки парсинга</li>
13 <li>Исключения</li>
13 <li>Исключения</li>
14 </ul><p>В PHP к ним еще добавляются:</p>
14 </ul><p>В PHP к ним еще добавляются:</p>
15 <ul><li>Notice</li>
15 <ul><li>Notice</li>
16 <li>Warning</li>
16 <li>Warning</li>
17 <li>Fatal Error</li>
17 <li>Fatal Error</li>
18 </ul><p>Если программа написана синтаксически некорректно, то мы не сможем запустить ее. Тут все просто: такие ошибки невозможно обработать, и мы их видим сразу.</p>
18 </ul><p>Если программа написана синтаксически некорректно, то мы не сможем запустить ее. Тут все просто: такие ошибки невозможно обработать, и мы их видим сразу.</p>
19 <p>Все остальные ошибки в других языках реализованы с помощью механизма исключений, который мы рассмотрим позже.</p>
19 <p>Все остальные ошибки в других языках реализованы с помощью механизма исключений, который мы рассмотрим позже.</p>
20 <p>Главное - это именно ошибки. Но их всегда можно перехватить и обработать. Пользователь программы даже не узнает, что они возникли.</p>
20 <p>Главное - это именно ошибки. Но их всегда можно перехватить и обработать. Пользователь программы даже не узнает, что они возникли.</p>
21 <p>В PHP многие ошибки являются исключениями (что хорошо), но далеко не все (что плохо). Например, попытка использовать несуществующую переменную в PHP не приводит к возникновению исключения - то есть ошибки. Программа продолжает работать, но в выводе работы программы можно заметить следующие строки:</p>
21 <p>В PHP многие ошибки являются исключениями (что хорошо), но далеко не все (что плохо). Например, попытка использовать несуществующую переменную в PHP не приводит к возникновению исключения - то есть ошибки. Программа продолжает работать, но в выводе работы программы можно заметить следующие строки:</p>
22 <p>PHP Notice - это даже не ошибка, а просто предупреждение, что код написан не очень хорошо, но останавливать его выполнение никто не будет.</p>
22 <p>PHP Notice - это даже не ошибка, а просто предупреждение, что код написан не очень хорошо, но останавливать его выполнение никто не будет.</p>
23 <p>В любом другом языке попытка использовать несуществующую переменную приводит к ошибке, и программисту придется ее исправить, но только не в PHP.</p>
23 <p>В любом другом языке попытка использовать несуществующую переменную приводит к ошибке, и программисту придется ее исправить, но только не в PHP.</p>
24 <p>Таким поведением PHP поощряет разработчиков писать плохой код, который не заработал бы ни в одном другом языке программирования. Какое при этом будет поведение у системы - большой вопрос.</p>
24 <p>Таким поведением PHP поощряет разработчиков писать плохой код, который не заработал бы ни в одном другом языке программирования. Какое при этом будет поведение у системы - большой вопрос.</p>
25 <p>То же самое касается и PHP Warning. Это тоже предупреждения, но более серьезные. Ну, и наконец, Fatal Error - это уже настоящие ошибки. В отличие от исключений, они не могут быть обработаны и просто завершают выполнение программы.</p>
25 <p>То же самое касается и PHP Warning. Это тоже предупреждения, но более серьезные. Ну, и наконец, Fatal Error - это уже настоящие ошибки. В отличие от исключений, они не могут быть обработаны и просто завершают выполнение программы.</p>
26 <p>Что еще интереснее: PHP<a>позволяет</a>подавить вывод этих предупреждений и сделать вид, что все хорошо:</p>
26 <p>Что еще интереснее: PHP<a>позволяет</a>подавить вывод этих предупреждений и сделать вид, что все хорошо:</p>
27 <p>Еще один механизм подавления - оператор @, который можно поставить перед любым вызовом функции. Он выключает Notice и Warning, происходящие внутри этой функции:</p>
27 <p>Еще один механизм подавления - оператор @, который можно поставить перед любым вызовом функции. Он выключает Notice и Warning, происходящие внутри этой функции:</p>
28 <p>Как вы понимаете, такой подход в разработке не сулит ничего хорошего. Любые Notice или Warning нужно рассматривать как серьезные ошибки, требующие исправления.</p>
28 <p>Как вы понимаете, такой подход в разработке не сулит ничего хорошего. Любые Notice или Warning нужно рассматривать как серьезные ошибки, требующие исправления.</p>
29 <p>На Хекслете эта проблема решена так: все оповещения типа Notice и Warning автоматически превращаются в исключения, а значит рассматриваются как настоящие ошибки. Такого поведения можно добиться, используя<a>xdebug</a>.</p>
29 <p>На Хекслете эта проблема решена так: все оповещения типа Notice и Warning автоматически превращаются в исключения, а значит рассматриваются как настоящие ошибки. Такого поведения можно добиться, используя<a>xdebug</a>.</p>