- Целые числа
- Переполнение целых чисел
- Преобразование в целое
- Из булевого типа
- Из чисел с плавающей точкой
- Условия в PHP
- Условный оператор if
- Конструкция if-else
- Конструкция if-elseif-else: несколько условий
- Приведение к boolean
- Оператор switch
- Сравнение switch с if
- И снова про switch
- Немного практики
- Чётное или нечётное
- Модуль
- Тернарный оператор
- И ещё немного практики
- Итог
Целые числа
Целые числа могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) системе счисления, с необязательным предшествующим знаком (- или +).
Двоичная запись integer доступна начиная с PHP 5.4.0.
Для записи в восьмеричной системе счисления, необходимо поставить пред числом 0 (ноль). Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x. Для записи в двоичной системе счисления, необходимо поставить перед числом 0b
Пример #1 Целые числа
$a = 1234 ; // десятичное число
$a = — 123 ; // отрицательное число
$a = 0123 ; // восьмеричное число (эквивалентно 83 в десятичной системе)
$a = 0x1A ; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
$a = 0b11111111 ; // двоичное число (эквивалентно 255 в десятичной системе)
?>?php
Формально, структуру целых чисел можно записать так:
десятичные : 87* | 0 шестнадцатеричные : 0[xX][0-9a-fA-F]+ восьмеричные : 01+ двоичные : 0b[01]+ целые : [+-]?десятичные | [+-]?шестнадцатеричные | [+-]?восьмеричные | [+-]?двоичные
Размер integer зависит от платформы, хотя, как правило, максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое). 64-битные платформы обычно имеют максимальное значение около 9E18, кроме Windows, которая всегда 32-битная. PHP не поддерживает беззнаковые целые ( integer ). С версии PHP 4.4.0 и PHP 5.0.5 размер integer может быть определен с помощью константы PHP_INT_SIZE , а его максимальное значение — с помощью константы PHP_INT_MAX .
Если в восьмеричном integer будет обнаружена неверная цифра (например, 8 или 9), оставшаяся часть числа будет проигнорирована.
Пример #2 Странности с восьмеричными числами
Переполнение целых чисел
Если PHP обнаружил, что число превышает размер типа integer , он будет интерпретировать его в качестве float . Аналогично, если результат операции лежит за границами типа integer , он будет преобразован в float .
Пример #3 Переполнение целых на 32-битных системах
$large_number = 2147483647 ;
var_dump ( $large_number ); // int(2147483647)
?php
$large_number = 2147483648 ;
var_dump ( $large_number ); // float(2147483648)
$million = 1000000 ;
$large_number = 50000 * $million ;
var_dump ( $large_number ); // float(50000000000)
?>
Пример #4 Переполнение целых на 64-битных системах
$large_number = 9223372036854775807 ;
var_dump ( $large_number ); // int(9223372036854775807)
?php
$large_number = 9223372036854775808 ;
var_dump ( $large_number ); // float(9.2233720368548E+18)
$million = 1000000 ;
$large_number = 50000000000000 * $million ;
var_dump ( $large_number ); // float(5.0E+19)
?>
В PHP не существует оператора деления целых чисел. Результатом 1/2 будет float 0.5. Если привести значение к integer , оно будет округлено вниз. Для большего контроля над округлением используйте функцию round() .
var_dump ( 25 / 7 ); // float(3.5714285714286)
var_dump ((int) ( 25 / 7 )); // int(3)
var_dump ( round ( 25 / 7 )); // float(4)
?>?php
Преобразование в целое
Для явного преобразования в integer , используйте приведение (int) или (integer). Однако, в большинстве случаев, в приведении типа нет необходимости, так как значение будет автоматически преобразовано, если оператор, функция или управляющая структура требует аргумент типа integer . Значение также может быть преобразовано в integer с помощью функции intval() .
Если resource преобразуется в integer , то результатом будет уникальный номер ресурса, привязанный к resource во время исполнения PHP программы.
Из булевого типа
FALSE преобразуется в 0 (ноль), а TRUE — в 1 (единицу).
Из чисел с плавающей точкой
При преобразовании из float в integer , число будет округлено в сторону нуля.
Если число с плавающей точкой превышает размеры integer (обычно +/- 2.15e+9 = 2^31 на 32-битных системах и +/- 9.22e+18 = 2^63 на 64-битных системах, кроме Windows), результат будет неопределенным, так как float не имеет достаточной точности, чтобы вернуть верный результат. В этом случае не будет выведено ни предупреждения, ни даже замечания!
Никогда не приводите неизвестную дробь к integer , так как это иногда может дать неожиданные результаты.
Условия в PHP
Всем привет! Вот и очередной урок по PHP подоспел. Сегодняшняя тема – одна из самых любимых у тех, кто начинает программировать. Ещё бы, ведь условия в PHP – это то, что позволяет нам составлять различные алгоритмы. Именно в зависимости от условий программа будет вести себя так или иначе. И именно благодаря им мы можем получать разный результат при разных входных данных. В PHP имеются несколько конструкций, с помощью которых можно реализовать условия. Все они используются, и имеют свои преимущества в разных ситуациях, или, если хотите – условиях. Кругом одни условия, не так ли? Так. Никто ведь не будет спорить, что в реальной жизни в зависимости от обстоятельств мы поступаем по-разному. В программировании это не менее важно и сейчас мы этому научимся.
Как вы должны помнить из прошлого урока, в PHP, в зависимости от оператора, операнды приводятся к определённому типу. Для операторов условий в PHP действуют те же правила, и здесь операнд всегда приводится к булевому значению. В случае, если это значение true, то считаем, что условие выполнено, а в случае, если false – то условие не выполнено. В зависимости от того, выполнено ли условие, мы можем делать или не делать какие-либо действия. И тут я предлагаю рассмотреть первый условный оператор – if.
Условный оператор if
Это самый простой, и самый часто используемый оператор. В общем случае конструкция выглядит следующим образом:
А в реальной жизни использование оператора if выглядит следующим образом:
Здесь мы явно передали оператору значение true. Разумеется, это абсолютно бессмысленно. Давайте с помощью условия будем определять числа больше 10. Это довольно просто:
И после запуска мы увидим результат:
Конструкция if-else
А можно ли сделать так, чтобы, когда условие не выполнилось, выполнился другой код? Конечно можно! Для этого вместе с оператором if используют оператор else (по-русски — иначе). Он пишется после фигурных скобок, в которые заключается код, выполняющийся при выполненном условии. И выглядит конструкция следующим образом:
Здесь опять же на экран будет выведено сообщение:
Однако если мы изменим входные данные, и переменной $x в самом начале присвоим значение 8, то выведется сообщение:
Число меньше либо равно 10
Попробуйте сделать это прямо сейчас.
Конструкция if-elseif-else: несколько условий
В случае, если вам нужно проверить несколько условий, после оператора if добавляется ещё и оператор elseif. Он проверит условие, только если не выполнится первое условие. Например:
В данном случае, на экран будет выведено:
И да, после этого оператора можно добавить else. Код внутри него будет выполнен, если не выполнилось ни одно из условий:
Результат этого кода, я полагаю, объяснять не нужно. Да, кстати, возможен целый список из elseif-ов. Например, такой:
elseif ($x == 1) < echo 'Число равно 1'; >elseif ($x == 2) < echo 'Число равно 2'; >else
Приведение к boolean
Помните, в уроке про типы данных в PHP мы с вами научились явно приводить значения к какому-либо типу. Например:
Результатом будет true.
Работающее так же, только неявное преобразование, всегда происходит в условии. Например, следующее условие:
Выполнится успешно, так как число 3 будет преобразовано к true. К false будут приводиться следующие значения:
Таким образом, любое ненулевое число и ненулевая строка будут преобразованы в 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-ов могуть быть записаны подряд, тогда код в секции выполнится при выполнении хотя бы одного из условий.
Немного практики
Ну что, запомнили операторы условий? Давайте закрепим на практике более реальными примерами.
Чётное или нечётное
Вот один из примеров – нужно определить, чётное ли число или нет. Для этого нам нужно проверить, что остаток от деления на 2 будет равен 0. Подробнее об операторах читайте тут. Давайте сделаем это:
Попробуйте самостоятельно изменить значение переменной $x. Круто, да? Оно работает!
Модуль
Давайте теперь научимся вычислять модуль числа. Если число больше или равно нулю, то нужно вывести само это число, если меньше – заменить знак с минуса на плюс.
Как мы видим, всё успешно отработало.
Тернарный оператор
Помимо этого, в PHP есть ещё один оператор, который представляет собой сокращённую форму конструкции if-else. Это тернарный оператор. При этом он возвращает разные результаты, в зависимости от того, выполнено ли условие или нет. В общем виде его использование выглядит следующим образом:
условие ? результат_если_true : результат_если_false
Или на примере того же нахождения модуля:
= 0 ? $x : -$x; echo 'Модуль: ' . $mod;
Круто, да? Тернарный оператор – очень элегантно вписывается при решении таких вот простеньких задачек.
И ещё немного практики
Условия можно помещать внутрь друг друга и вообще, чего с ними только можно не делать. Например:
Итог
Друзья, надеюсь вам понравился урок. Если это так – буду рад, если вы поделитесь им в социальных сетях или расскажете друзьям. Это лучшая поддержка проекта. Спасибо тем, кто это делает. Если у вас возникли какие-то вопросы или замечания – напишите об этом в комментариях. А сейчас – все быстренько делаем домашнее задание, там ещё больше интересных примеров с условиями. Всем пока!