Неожиданный (
Открывающиеся круглые скобки обычно следуют языковым конструкциям, таким как / / / / или запускают арифметическое выражение. Они синтаксически неверны после , предыдущего , одиночного и в некоторых типичных контекстах объявления.
-
Параметры объявления функции
Более редкое появление этой ошибки пытается использовать выражения в качестве параметров функции по умолчанию . Это не поддерживается даже в PHP7:
Параметры в объявлении функции могут быть только литеральными значениями или постоянными выражениями. В отличие от функций invocations, где вы можете свободно использовать и т. Д.
-
По умолчанию свойства класса
То же самое для деклараций членов класса , где допускаются только значения литерала / константы, а не выражения:
Поместите такие вещи в конструктор. См. Также Почему атрибуты PHP не позволяют выполнять функции?
Снова отметим, что PHP 7 разрешает только там постоянные выражения.
-
Когда это происходит, оно обычно указывает на неисчерпаемую предыдущую строку; и буквальные разделы, попадающие в контекст кода PHP.
-
isset(()), empty, key, next, current
Both and are language built-ins, not functions. They need to access a variable directly . If you inadvertently add a pair of parentheses too much, then you’d create an expression however:
Same applies to any language construct that requires implicit variable name access. These built-ins are part of the language grammer, therefore don’t permit decorative extra parens.
User-level functions that require a variable reference -but get an expression result passed- lead to runtime errors instead.
Функции, зависящие от условий
Мы можем создавать (определять, описывать) функцию, в зависимости от условия. Например:
<?php $apply = true; sayHi(); //вызвали функцию sayHi, её можно вызывать в любом месте /*здесь нельзя вызвать функцию sayGoodbye, так как мы ещё не проверили условие и не зашли внутрь конструкции if*/ if($apply){ function sayGoodbye(){ echo 'Всем пока! <br>'; } } /*вот теперь можем вызвать sayGoodbye*/ sayGoodbye(); function sayHi(){ echo 'Всем привет! <br>'; }
Результат:
И взгляните на этот пример:
<?php $apply = true; sayHi(); /*вызвали функцию sayHi, её можно вызывать в любом месте*/ /*а вот что будет, если вызвать sayGoodbye здесь*/ sayGoodbye(); if($apply){ function sayGoodbye(){ echo 'Всем пока! <br>'; } } function sayHi(){ echo 'Всем привет! <br>'; }
Результат:
Всё понятно из названия ошибки, разве что стоит пояснить следующую вещь: интерпретатор PHP при первом (быстром) обходе не видит что функция sayGoodbye вообще хоть где-то описана, он увидит это только когда код начнёт выполняться и только если условие будет true (читайте про типы переменных).
На самом деле, сколько я работаю, ни разу нигде такого не встречал, но иметь в виду нужно все возможности языка.
Особенности синтаксиса PHP
Первое, каждая инструкция (выражение) должна заканчиваться точкой с запятой ; Например:
<?php error_reporting(E_ALL); //говорим PHP, чтобы он показывал нам абсолютно все связанные с ним ошибки header('Content-Type: text/html; charset=utf-8'); // кодировка echo 'Наш первый ПХП скрипт работает!<br />'; //выводим текст на страницу ?>
В строке №3 указываем кодировку страницы.
Второе, всё то же самое можно записать и в одну строку, между инструкциями в одной строке можно ставить сколько угодно пробелов, в том числе и вовсе без пробелов:
<?php error_reporting(E_ALL);header('Content-Type: text/html; charset=utf-8'); echo 'Наш первый ПХП скрипт работает!<br />'; ?>
Третье, PHP инструкция может быть разорвана на несколько строк:
<?php echo 'На ш первый ПХ П скрипт работает! <br /> '; ?>
Результат:
Мы наблюдаем, что браузер интерпретировал каждый перевод строки как обычный пробел, чего и требовалось ожидать.
Четвёртое, в PHP как и во всех языках программирования есть комментарии. В PHP их 2 вида: однострочные и многострочные.
// - однострочный комментарий # - это тоже однострочный комментарий /* Ваш комментарий */ - многострочный комментарий
Бытует мнение, что у правильного программиста комментарии должны составлять 30% от всего кода. Однако избыточность комментариев тоже совсем не к чему, не стоит оставлять комментарии по типу «здесь я посмотрел в окно и почесал нос».
Пространство имен
- Внутри пространства имен может содержаться любой код PHP. Если он предназначен для классов, интерфейсов, функций и констант, тогда код зависит от пространства имен;
- Пространство имен всегда объявляется с помощью namespace. Если мы объявляем пространство имен в скрипте, то это объявление всегда должно размещаться в его начале. То есть выше всего остального PHP-кода, кроме declare;
- Можно определить одно пространство имен в нескольких файлах. Это позволяет распределить содержимое пространства имен в файловой системе;
- На пространство имен можно ссылаться, используя полное имя с псевдонимом, это также называется импортированием. Что эквивалентно функции создания символьных ссылок на директории или файлы в системах на основе UNIX;
- Всеми версиями PHP поддерживаются три вида alias или импортирования. Псевдоним имени класса, псевдоним имени интерфейса и псевдоним имени пространства имен. Но версии PHP 5.6+ и 7 поддерживают aliasing или импортирование имен функций и констант;
- use PHP как использовать: глобально или внутри объявления пространства имен. Глобальное объявление необходимо, так как импортирование производится во время компиляции, а не во время исполнения. Следовательно, оно не может быть заблокировано или ограничено локально;
- Ниже приведен пример использования пространства имен в коде РНР:
Статические переменные
Представьте себе следующую ситуацию: нам нужно посчитать сколько раз мы всего поздоровались. Вот что мы пытаемся сделать:
<?php function sayHi($name){ $c = 0; // счётчик echo 'Привет, '.$name.'! <br>'; $c++; // увеличиваем счётчик на 1 echo 'Всего поздоровались ' . $c . ' раз.<hr>'; } sayHi('Рудь Сергей'); sayHi('Андрей'); sayHi('Дмитрий');
Результат:
Переменная $c не запоминает своего значения, она каждый раз создаётся заново. Нам нужно сделать так, чтобы наша локальная переменная $c запоминала своё значение после выполнения функции, для этого используют ключевое слово static:
<?php function sayHi($name){ static $c = 0; // счётчик, сделали статическим echo 'Привет, '.$name.'! <br>'; $c++; // увеличиваем счётчик на 1 echo 'Всего поздоровались ' . $c . ' раз.<hr>'; } sayHi('Рудь Сергей'); sayHi('Андрей'); sayHi('Дмитрий');
Результат:
Область видимости переменных
В PHP ровно две области видимости: глобальная и локальная. В каждом языке программирования области видимости устроены по-разному. Например, в C++ даже в циклах своя (локальная) область видимости. В PHP, кстати, циклы – это глобальная область видимости. Но сегодня мы говорим о функциях.
У функций в PHP своя, внутренняя область видимости (локальная), то есть все переменные внутри функции видны только внутри этой самой функции.
Итак, ещё раз: все, что вне функций – это глобальная область видимости, все, что внутри функций – локальная область видимости. Пример:
<?php function sayHi($name){ echo 'Привет, '.$name.'! <br>'; $name = 'Рудь Сергей'; } $name = 'Андрей'; sayHi($name); echo $name; // ?
Уважаемые знатоки, внимание, вопрос! Что выведет последняя инструкция echo $name; ?
Ответ:
Как вы сами видели, у нас было 2 переменных $name, одна внутри функции (локальная область видимости), другая просто в коде (глобальная область видимости), последнее присвоение в переменную $name было $name = ‘Рудь Сергей’; Но так как это было внутри функции, то там оно и осталось. В глобальной же области видимости последним присвоением было $name = ‘Андрей’; что мы собственно и видим в результате.
То есть две одинаковые переменные, но в разных областях видимости никак не пересекаются и не влияют друг на друга.
Давайте я проиллюстрирую области видимости на рисунке:
При первом обходе интерпретатор бегло просматривает глобальную область видимости, запоминает какие есть переменные и функции, но не выполняет код.
Обращение к глобальным переменным из локальной области видимости
Но что если нам всё-таки нужно из функции обратиться к той самой переменной $name из глобальной области видимости, да не просто обратиться, а изменить её? Для этого есть 3 основных варианта. Первый из них использование ключевого слова global:
<?php function sayHi($name){ echo 'Привет, '.$name.'! <br>'; global $name; /*начиная с этого момента мы имеем ввиду глобальную переменную $name*/ $name = 'Рудь Сергей'; } $name = 'Андрей'; sayHi($name); echo $name; // ?
Результат:
Но у этого способа есть минус, с тех пор как мы обратились к глобальной переменной $name мы потеряли (переписали) локальную переменную $name.
Второй способ заключается в том, чтобы использовать суперглобальный массив PHP. В этот массив PHP сам, автоматически помещает каждую переменную, которую мы создали в глобальной области видимости. Пример:
$name = 'Андрей'; //Тоже самое что и $GLOBALS = 'Андрей';
Следовательно:
<?php function sayHi($name){ echo 'Привет, '.$name.'! <br>'; $GLOBALS = 'Рудь Сергей'; } $name = 'Андрей'; sayHi($name); echo $name; // ?
Результат тот же, что и при использовании ключевого слова global:
Только в этот раз мы не переписали локальную переменную, то есть переменная $name внутри функции осталась прежней и равна «Андрей», а не «Рудь Сергей».
Вложенные конструкции if-else.
Что называют вложенными конструкциями if-else? Это такие конструкции, которые состоят из нескольких условий.
Теперь рассмотрим вложенные конструкции if-else. Такие конструкции могут состоять из нескольких условий в выполняемых правилах. Для примера добавим еще две переменные $familiya1 и $familiya2:
$familiya1=»ivanov»;$familiya2=»sidarov»;
Как это выглядит в PHP-коде:
<html> <head> <title>основы php на BlogGood.ru</title> </head> <body> <?php $a=5; $b=5; $k=55; $n=88; $familiya1="ivanov"; $familiya2="sidarov"; if ($a == $b and $k != $n) { if ($familiya1 != $familiya2) { echo "Все ОK :)<br> В переменных familiya1 и familiya2 содержатся разные фамилии."; } else { echo "Не так все плохо, как вам кажется :(<br> В переменных familiya1 и familiya2 содержатся одинаковые фамилии."; } } else { echo "Не все ОК :("; } ?> </body> </html>
Разъяснение:
Смотрите, здесь были выполнены все условия
if ($a == $b and $k != $n)
Переменная $a равная с переменной $b и переменная $k не равная с $n. Здесь условия были выполнены, а это значит, что будет работать эта часть кода:
if ($familiya1 != $familiya2){echo «Все ОK : )<br>В переменных familiya1 и familiya2 содержатся разные фамилии.»;}
Так как переменные $familiya1 и $familiya2 между собой не равны и это правда,
$familiya1=»ivanov»;$familiya2=»sidarov»;
то будет работать вот эта часть кода:
{echo «Все ОK : )<br>В переменных familiya1 и familiya2 содержатся разные фамилии.»;}
Смотрим результат! Сохраните код PHP как «if-else.php» в папку «test-1» локального сервера (см. урок 1).
Введите в браузере адрес:
Результат:
Если в переменных $familiya1 и $familiya2 сделать значение одинаковыми:
$familiya1=»sidarov»;$familiya2=»sidarov»;
тогда, увы, здесь условия выполненными не будут, так как в условии стоит, что переменные должны быть не равными:
if ($familiya1 != $familiya2)
Вот по этой причине будет работать вот эта часть кода:
else{echo «Не так все плохо, как вам кажется : (<br>В переменных familiya1 и familiya2 содержатся одинаковые фамилии.»;}
В результате на мониторе вы увидите картинку:
Вот мы и закончили полностью тему «Оператор условия if-else для PHP». Чтобы закрепить «Урок 5» и «Урок 6», рекомендую самостоятельно поработать над созданием собственных условий.
А я пойду готовить для вас новые уроки по основам PHP. Подписывайтесь на обновления блога, если не хотите пропустить уроки по PHP.
Всего хорошего!
Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓
Популярные статьи:
-
Как узнать id компьютера
Дата: 29 марта 2013
Прокомментировано:90
просмотров: 323469 -
Размеры форматов листов А0 – А7
Дата: 23 января 2013
Прокомментировано:3
просмотров: 270955 -
Смешные логические загадки с подвохом, отгадки прилагаются
Дата: 12 ноября 2014
Прокомментировано:5
просмотров: 198586 -
Установка windows 7 на ноутбук
Дата: 18 декабря 2012
Прокомментировано:169
просмотров: 184814 -
Как включить или отключить Aero в Windows 7
Дата: 1 июня 2013
Прокомментировано:6
просмотров: 159161
Unexpected }
When getting an «unexpected » error, you’ve mostly closed a code block too early.
-
Last statement in a code block
It can happen for any unterminated expression.
And if the last line in a function/code block lacks a trailing semicolon:
Here the parser can’t tell if you perhaps still wanted to add to the function result or something else.
-
Invalid block nesting / Forgotten
You’ll sometimes see this parser error when a code block was closed too early, or you forgot an opening even:
In above snippet the didn’t have an opening curly brace. Thus the closing one below became redundant. And therefore the next closing , which was intended for the function, was not associatable to the original opening curly brace.
Such errors are even harder to find without proper code indentation. Use an IDE and bracket matching.
РАЗНЫЕ НА ДРУГИХ ЯЗЫКАХ
die() и exit() различны в других языках , но в PHP они идентичны.
Возможный Дубликат : каковы различия в die() и exit() в PHP? Я совершенно запутался в различии die и exit . Большинство программистов используют die таким образом. $link = mysql_connect(‘localhost’, ‘mysql_user’, ‘mysql_password’); //don’t see mysql_* problem it is just example if (!$link) <.
Возможный Дубликат : каковы различия в die() и exit() в PHP? Я думаю, что главный вопрос заключается в том, в чем именно разница между этими тремя? Каково правильное семантическое использование для каждого из них? Из того, что я вижу, return false; может прекратить работу функции, в то время как.
Похожие вопросы:
Я видел, как какой-то код делает это: if(something) < echo ‘exit from program’; die; >. more code И другие, которые просто используют die : if(something) die(‘exit from program’); . more code Есть.
В чем разница между оператором return и exit в программировании C при вызове из любого места программы C?
В чем разница между операторами return и exit в функциях Bash в отношении кодов выхода?
В чем разница между self и $this-> в классе PHP или методе PHP? Пример: Я недавно видел этот код. public static function getInstance() < if (!self::$instance) < self::$instance = new.
В чем разница между die() и exit() функциями в PHP? Я думаю, что оба имеют одинаковую функциональность, но я сомневаюсь, что в обоих есть что-то другое. что это?
Возможный Дубликат : каковы различия в die() и exit() в PHP? Я совершенно запутался в различии die и exit . Большинство программистов используют die таким образом. $link = mysql_connect(‘localhost’.
Возможный Дубликат : каковы различия в die() и exit() в PHP? Я думаю, что главный вопрос заключается в том, в чем именно разница между этими тремя? Каково правильное семантическое использование для.
У меня есть такой класс : Я хотел бы знать, в чем разница между следующими командами, какая из них лучше? Class foo < function test() < return false; >function test2() < return self::test(); >.
Я знаю PHP две функции die(); и exit(); Я использую обе функции, когда хочу все остановить. Эти две функции делают одно и то же? Могу ли я использовать только один из них?
в чем разница между exit и std::exit в C++? Я исследовал его, но ничего не нашел. В чем разница между этими двумя кодами: 1 : if(SDL_Init(SDL_INIT_EVERYTHING) != 0) < std::cout << Error: Can’t.
Unexpected T_IS_EQUAL Unexpected T_IS_GREATER_OR_EQUAL Unexpected T_IS_IDENTICAL Unexpected T_IS_NOT_EQUAL Unexpected T_IS_NOT_IDENTICAL Unexpected T_IS_SMALLER_OR_EQUAL Unexpected
Comparison operators such as , , , , , and or and mostly should be used just in expressions, such as expressions. If the parser complains about them, then it often means incorrect paring or mismatched parens around them.
-
Parens grouping
In particular for statements with multiple comparisons you must take care to correctly count opening and closing parenthesis :
Here the condition here was already terminated by the
Once your comparisons become sufficiently complex it often helps to split it up into multiple and nested constructs rather.
-
A common newcomer is pitfal is trying to combine or with comparisons:
Or even:
This doesn’t make sense to PHP, because and are language constructs that only accept variable names. It doesn’t make sense to compare the result either, because the output is only/already a boolean.
-
Confusing greater-or-equal with array operator
Both operators look somewhat similar, so they sometimes get mixed up:
You only need to remember that this comparison operator is called » greater than or equal » to get it right.
See also: If statement structure in PHP
-
Nothing to compare against
You also can’t combine two comparisons if they pertain the same variable name:
PHP can’t deduce that you meant to compare the initial variable again. Expressions are usually paired according to operator precedence , so by the time the is seen, there’d be only a boolean result left from the original variable.
See also: unexpected T_IS_SMALLER_OR_EQUAL
-
Comparison chains
You can’t compare against a variable with a row of operators:
This has to be broken up into two comparisons, each against .
This is actually more a case of blacklisted expressions (due to equivalent operator associativity). It’s syntactically valid in a few C-style languages, but PHP wouldn’t interpret it as expected comparison chain either.
-
Unexpected Unexpected
The greater than or less than operators don’t have a custom tokenizer name. And while they can be misplaced like all they others, you more often see the parser complain about them for misquoted strings and mashed HTML:
This amounts to a string being compared to a literal constant and then another comparison. Or that’s at least how PHP sees it. The actual cause and syntax mistake was the premature string termination.
Инструкция switch
Инструкция switch сравнивает выражение с несколькими значениями. Как правило, в качестве выражения используется переменная, в зависимости от значения которой должен быть исполнен тот или иной блок кода. Например, представим себе переменную $action, которая может иметь значения «ADD» (добавить), «MODIFY» (изменить) и «DELETE» (удалить).
Инструкция switch позволяет легко определить блок кода, который должен исполняться для каждого из этих значений.
Чтобы показать разницу между инструкциями if и switch, выполним проверку переменной на соответствие нескольким значениям. В примере ниже приведен программный код, реализующий такую проверку на базе инструкции if, а в последующем примере – на базе инструкции switch:
Проверка на соответствие одному из нескольких значений (инструкция if)
Проверка на соответствие одному из нескольких значений (инструкция switch)
Инструкция switch берет значение, стоящее рядом с ключевым словом switch, и начинает сравнивать его со всеми значениями, стоящими рядом с ключевыми словами case, в порядке их расположения в программе. Если соответствие не найдено, не исполняется ни один из блоков. Как только совпадение обнаружено, выполняется соответствующий блок кода. Расположенные ниже блоки кода также исполняются – до конца инструкции switch или до ключевого слова break. Это удобно для
организации процесса, состоящего из нескольких последовательных шагов. Если пользователь уже проделал некоторые шаги, он сможет продолжить процесс с того места, на котором прервался.
Выражение рядом с инструкцией switch должно возвращать значение элементарного типа, например число или строку. Массив можно задействовать только в виде его отдельного элемента, имеющего значение элементарного типа.
Выбор по умолчанию
Если значение условного выражения не совпало ни с одним из предложенных в инструкциях case вариантов, инструкция switch и в этом случае позволяет что-то сделать, примерно как инструкция else конструкции if, elseif, else. Для этого нужно последним вариантом в списке выбора сделать инструкцию default:
Создание сообщения об ошибке с помощью инструкции default
Кроме обычного, инструкция switch поддерживает альтернативный синтаксис – конструкцию из ключевых слов switch/endswitch, определяющих начало и конец инструкции вместо фигурных скобок:
Инструкция switch завершается ключевым словом endswitch
Прерывание исполнения
Если должен быть исполнен только блок кода, соответствующий определенному значению, то в конце этого блока следует вставить ключевое слово break. Интерпретатор PHP, встретив ключевое слово break, перейдет к исполнению строки, расположенной после закрывающей фигурной скобки инструкции switch (или ключевого слова endswitch). Но если не использовать инструкцию break то проверка продолжается в последующих ветвях case конструкции switch. Ниже показан пример:
Что происходит при отсутствии операторов break
Если переменная $action будет иметь значение «ASSEMBLE ORDER», результат работы этого фрагмента будет следующим:
Собрать заказ. Упаковать. Доставить заказчику.
Если предположить, что стадия сборки уже была пройдена, и переменная $action имеет значение «PACKAGE», то будет получен следующий результат:
Упаковать. Доставить заказчику.
Иногда, отсутствие операторов break бывает полезным, как в приведенном примере, где формируются стадии заказа, но в большинстве случаев следует использовать этот оператор.
Приведение к boolean
Помните, в уроке про типы данных в PHP мы с вами научились явно приводить значения к какому-либо типу. Например:
Результатом будет true.
Работающее так же, только неявное преобразование, всегда происходит в условии. Например, следующее условие:
Выполнится успешно, так как число 3 будет преобразовано к true. К false будут приводиться следующие значения:
- » (пустая строка)
- 0 (число 0)
Таким образом, любое ненулевое число и ненулевая строка будут преобразованы в true и условие выполнится. Исключение – строка, состоящая из одного нуля:
Она также будет преобразована к false.
Я затронул эту тему с приведением к boolean в домашнем задании к этому уроку. Обязательно его выполните. А сейчас давайте перейдём к следующему условному оператору.
Оператор switch
Помимо конструкции if-else есть ещё один оператор условия. Это – switch. Это очень интересный оператор, требующий запоминания нескольких правил. Давайте для начала посмотрим, как он выглядит на следующем примере:
Сначала может показаться, что этот оператор довольно сложный. Однако, если разобраться, то всё становится понятно. В операнде switch указывается некоторое выражение. В нашем случае, это переменная $x, а точнее её значение — 1.
В фигурных скобках мы перечисляем операторы case, после которых указываем значение, с которым сравнивается значение операнда switch. Сравнение происходит нестрогое, то есть как будто используем оператор ==. И если условие выполнилось, то выполняется код, указанный после двоеточия. Если же ни одно из условий не выполнилось, то выполняется код из секции default, которой в общем-то может и не быть, и тогда ничего выполняться не будет
Обратите внимание, внутри каждой секции case, в конце мы прописали оператор break. Это делается для того, чтобы после выполнения кода в случае выполнения условия не продолжилась проверка условий
То есть, если бы не было break в конце секции case 1, то после того, как вывелся бы текст
продолжило бы выполняться условие сравнения с 2, а затем бы выполнился и код в секции default. Не забывайте писать break!
Сравнение switch с if
Вообще, этот код можно было бы записать и с помощью конструкции if-elseif-else:
Но в виде конструкции switch-case код в конкретно этом случае выглядит проще. И вот почему:
- мы сразу видим, что конкретно мы сравниваем (переменную $x) и понимаем, что сравниваем в каждом условии именно это значение, а не какое-либо ещё;
- глазу удобнее воспринимать то, с чем сравниваем – секции case 1, case 2 визуально воспринимаются легче, сравниваемое значение заметнее.
И снова про switch
И я ещё не всё сказал про switch — можно писать несколько case-ов подряд, тогда код выполнится при условии, что выполнен хотя бы один из них. Например:
Согласитесь, это может быть удобно.
Хорошо, давайте пройдёмся по особенностям оператора switch, о которых нужно помнить всегда.
- break прерывает набор условий, не забывайте указывать его;
- секция default будет выполнена, если не выполнилось ни одно из условий. Она может и вовсе отсутствовать;
- несколько case-ов могуть быть записаны подряд, тогда код в секции выполнится при выполнении хотя бы одного из условий.
Логические операции
Логические операции позволяют комбинировать логические значения (называемые также истинностными) для получения новых логических значений. Как показано в таблице ниже, в языке PHP поддерживаются стандартные логические операции (and, or, not и xor), причем первые две имеют альтернативные версии.
Операция | Описание |
---|---|
and | Операция, результат которой принимает истинное значение тогда и только тогда, когда оба ее операнда имеют истинное значение |
or | Операция, результат которой принимает истинное значение, если один из ее операндов (или оба операнда) имеет истинное значение |
! | Операция, результат которой принимает истинное значение, если ее единственный операнд (задаваемый справа от знака операции) имеет ложное значение, и ложное значение, если операнд имеет истинное значение |
xor | Операция, результат которой принимает истинное значение, если любой из ее операндов (но не оба одновременно) имеет истинное значение |
&& | То же, что и операция and, но связывает свои операнды сильнее по сравнению с этой операцией |
|| | То же, что и операция or, но связывает свои операнды сильнее по сравнению с этой операцией |
Операции && и || должны быть знакомы программистам, работающим с языком C. Операцию ! обычно называют not, поскольку она становится отрицанием для того операнда, к которому применяется.
Чтобы проверить, имеют ли оба операнда значение TRUE, следует использовать оператор AND, который можно записать и как двойной амперсанд (&&). Оба оператора, AND и &&, являются логическими, их единственное отличие в том, что оператор && имеет более высокий приоритет, чем оператор AND. То же самое относится к операторам OR и ||. Оператор AND возвращает TRUE, только если оба операнда имеют значение TRUE; в противном случае возвращается значение FALSE.
Чтобы проверить, имеет ли хотя бы один операнд значение TRUE, следует использовать оператор OR, который можно записать и как двойную вертикальную линию (||). Этот оператор возвращает TRUE, если хотя бы один из операндов имеет значение TRUE.
При использовании оператора OR в программе могут появиться трудноуловимые логические ошибки. Если PHP обнаружит, что первый операнд имеет значение TRUE, он не станет вычислять значение второго операнда. Это позволяет экономить время исполнения, но вы должны внимательно следить за тем, чтобы код, от которого зависит корректная работа программы, не был помещен во второй операнд.
Проверить, имеет ли значение TRUE только один из операндов (но не оба сразу), позволяет оператор XOR. Этот оператор возвращает значение TRUE, если один и только один из операндов имеет значение TRUE. Если оба операнда имеют значение TRUE, оператор вернет значение FALSE.
Инвертировать логическое значение можно с помощью оператора NOT, который часто записывается и в виде восклицательного знака (!). Он возвращает значение TRUE, если операнд имеет значение FALSE, и значение FALSE, если операнд имеет значение TRUE.
В таблице ниже приведены некоторые логические выражения и их результаты:
Пример логического выражения | Результат |
---|---|
TRUE AND TRUE | TRUE |
FALSE AND TRUE | FALSE |
TRUE OR FALSE | TRUE |
FALSE OR FALSE | FALSE |
TRUE XOR TRUE | FALSE |
TRUE XOR FALSE | TRUE |
!TRUE | FALSE |
!FALSE | TRUE |
Пример использования continue
Не менее редко при каких-то условиях требуется перейти к следующей итерации, не доходя до конца текущей. К примеру – мы хотели бы вывести все числа от 1 до 20, за исключением тех, что делятся на 3 без остатка.
Мы могли бы решить эту задачу с помощью условия – если остаток от деления на 3 не равен нулю, то вывести число.
Результат будет следующим:
Однако, это можно сделать более изящно. А именно – если число делится на 3 без остатка, то просто переходить к следующей итерации и ничего не делать. А внутри тела цикла, уже вне каких-либо условий, выполнять какой-то код.
Выглядеть это будет так.
Результат работы этого кода будет таким же, как и в предыдущем случае. Но с точки зрения сложности чтения и понимания, код упростился. Я понимаю, сейчас трудно уловить эту тонкую грань, но подумайте вот о чём. В задании мы говорили о том, чтобы вывести числа, не делящиеся на 3 без остатка. Значит эти числа – первичны. А остальные числа, которые делятся на 3, нам не нужны. Значит они для нас должны иметь второстепенное значение. И в цикле мы просто отсекаем лишнее, а затем идёт основной алгоритм – вывод того, что нам нужно.
Я не жду от вас, что вы сейчас полностью поймёте о чём я говорю, но будьте уверены – со временем вы к этому придёте через практику.
А сейчас – за домашнее задание.
#loops
#break
#continue
#операторы
@ivashkevich
28.12.2017 в 08:30
9912
+1340
PHP для начинающих
60%
Назад
Следующий урок