Аргерих Л. О языке РНР. Часть 1. Страница 123


Распространенные синтаксические ошибки связаны с пропуском парных скобок и других знаков пунктуации, ошибками в написании ключевых слов, пропущенным знаком $ перед переменными и т. п. Большинство син­таксических ошибок представляют собой опечатки или совершаются нович­ками, еще недостаточно освоившими синтаксис. Обычно можно найти стро­ку, в которой есть синтаксическая ошибка, поскольку анализатор сообщает об ошибке вместе с номером строки. Однако так бывает не всегда, о чем сви­детельствует следующий пример:

<?php

//Sample.php

for ($count 0; Scount 10; ++$count)

echo(Scount) . .

<h2>Sample program</h2> <?php

ends

?> . . ... '

В данном случае анализатор не сообщает об ошибке в строке 4, где пропуще­на точка с запятой после оператора echo.

Семантические ошибки

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

Другим примером является использование в операции неправильного опера­тора. Поскольку РНР - язык со слабой типизацией, большинство операто­ров обычно работает с переменными любых типов, однако результат может оказаться бессмысленным.

Применение оператора умножения к двум символьным строкам даст в ре­зультате ноль, потому что РНР преобразует обе строки к нулевым значениям и перемножит их. Это относится к случаям, когда строки не выглядят как числа. Если строка выглядит как число и фигурирует в числовом контексте, будет взято число, которое можно из этой строки извлечь. Например, следу­ющий код возвращает в броузер число 404:

<?php

//String_Mult.php

echo("101 Dalmations" * "4 Beatles"); ?>

Рассмотрим другую распространенную семантическую ошибку в операторе switch:

<?php

//Sample_Switch.php $color =

switch (Scolor) { case "персиковый":

еспо("Мой любимый цвет персиковый <br>");

case "розовый":

любимый цвет

}

?>

Будет получен неожиданный результат: оба цвета - персиковый и розовый - окажутся любимыми. Синтаксически эта конструкция верна и может ока­заться полезной, если требуется выразить условие логического ИЛИ между двумя случаями (см. ниже). Отсутствие оператора break после первого echo привело к проваливанию и выполнению следующего оператора.




Городская ветеринарная служба ВЕТГАРАНТ в Москве предоставляет комплекс услуг, связанных с вашими животными, в том числе и кремация животных, гуманное усыпление, вывоз. Мы стараемся как можно больше облегчить хозяевам боль от утраты.