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>