Как выполнить целочисленное деление в PHP. Обработка чисел и математические операции Php умножение переменных

В PHP доступны все основные математические операции. В качестве операндов можно использовать как целые, так и вещественные числа.

В таблице приведен список арифметических операторов :
Оператор Знак Описание
Сложение + Сложение двух значений
Вычитание - Вычитание одного значения из другого
Умножение * Перемножение двух значений
Деление / Деление одного значения на другое
Получение остатка от деления % Деление одного значения на другое и возвращение остатка (деление по модулю)
Инкремент ++ Сокращенная запись увеличения числа на единицу
Декремент -- Сокращенная запись уменьшения числа на единицу
Унарное отрицание - Превращение положительного числа в отрицательное или отрицательного в положительное

Операторы вычитания, умножения, деления, деления по модулю и сложения

Операторы вычитания, умножения, деления, деления по модулю и сложения используется точно так же, как и в математике. Здесь стоит уделить внимание операторам деления и деления по модулю.

Оператор деления (" / ") возвращает число с плавающей точкой, кроме случая, когда оба значения являются целыми числами (или строками, которые преобразуются в целые числа), которые делятся нацело - в этом случае возвращается целое значение.

result2 = $result2
"; echo "result3 = $result3
result4 = $result4"; ?>

При делении по модулю операнды преобразуются в целые числа (c удалением дробной части) до начала операции. Результат операции остатка от деления % будет иметь тот же знак, что и делимое:

Унарное отрицание

Оператор унарного отрицания обозначается знаком " - ", он изменяет значение своего единственного операнда на противоположное:

В данном случае круглые скобки не нужны, потому что унарное отрицание имеет наивысший приоритет, но они помогают организовать код таким образом, чтобы было понятно, что имеет место сложение чисел -5 и 4.

Инкремент

Оператор инкремента, обозначается знаком ++ и может быть расположен с любой стороны от операнда, с которым он работает. Он увеличивает это значение на единицу, точно также, как при прибавлении единицы к значению. Фактический результат зависит от того, где был применен оператор, до или после операнда, с которым он применялся. Данный оператор часто используется с переменными, и зачастую это происходит внутри циклов (про циклы будет рассказано далее).

Префиксная форма инкремента

Префиксная форма - это когда оператор инкремента расположен перед операндом, такая форма записи означает то, что инкремент будет выполнен первым: он увеличивает значение операнда на единицу и только потом уже выполняется вся остальная часть инструкции:

Постфиксная форма инкремента

Постфиксная форма записывается немного по другому - инкремент располагается в этом случае после операнда. При постфиксной форме записи первое использование операнда возвращает его текущее значение, только после этого значение будет увеличено на единицу:

Декремент

Оператор декремента, обозначается знаком -- , и в отличие от оператора инкремента, уменьшает, а не увеличивает, на единицу значение своего операнда. Декремент также допускает префиксную и постфиксную форму записи:

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

Разработчики языка PHP приняли вполне обоснованный подход и не стали предпринимать какие-либо попытки снова изобретать колеса, предназначенные для указанной цели. Дело в том, что многие из наиболее фундаментальных математических функций, применяемых в языке PHP, являются просто оболочками вокруг аналогов этих функций на языке C.

Математические операции

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

Арифметические операции

К пяти основным арифметическим операциям относятся те операции, которые обычно реализованы в любом четырехфункциональном калькуляторе, а также операция деления по модулю (%). Краткое описание арифметических операций приведено в таблице:

Арифметические операции
Операция Описание
+ Возвращает сумму значений двух своих операндов
- Если имеются два операнда, то значение правого операнда вычитается из значения левого. Если имеется только правый операнд, то операция возвращает значение этого операнда с обратным знаком
* Возвращает произведение значений двух своих операндов
/ Возвращает результат деления с плавающей точкой значения левого операнда на значение правого операнда
% Возвращает остаток от целочисленного деления значения левого операнда на абсолютное значение правого операнда

При использовании в программе первых трех описанных выше арифметических операций (+,-,*) следует учитывать, что при выполнении этих операций происходит распространение типа от значений с плавающей точкой двойной точности к целочисленным значениям. Под этим подразумевается следующее: если оба операнда операции являются целыми числами, то результатом становится целое число, а если хотя бы один из операндов представляет собой число с плавающей точкой двойной точности, то результатом становится число с плавающей точкой двойной точности. Такого же рода распространение типа происходит и при выполнении операции деления; кроме того, возникает такой дополнительный эффект, что результат становится числом с плавающей точкой двойной точности, если деление не осуществляется без остатка (нацело).

Операция деления по модулю (%) в языке PHP принимает целочисленные операнды, а если эта операция применяется к числам с плавающей точкой двойной точности, то эти числа предварительно преобразуются в целые числа (путем отбрасывания дробной части). Результатом такой операции всегда является целое число.

Операции инкремента и декремента

Значительная часть синтаксиса языка PHP унаследована от языка C, а программисты C славятся любовью к краткости и гордятся этим. Операции инкремента и декремента, взятые из языка C, позволяют более кратко представлять выражения типа $count = $count + 1 , которые обычно встречаются в программах достаточно часто.

Операция инкремента (++) применяется для добавления единицы к значению той переменной, на которую распространяется эта операция, а операция декремента (--) вычитает единицу из значения такой переменной.

Каждая из этих двух операций имеет две разновидности - суффиксную (в этой форме знак операции помещается непосредственно вслед за переменной, на которую распространяется операция) и префиксную (в этой форме знак операции помещается непосредственно перед переменной, на которую распространяется операция). Обе разновидности имеют один и тот же побочный эффект, связанный с изменением значения переменной, но суффиксные и префиксные операции возвращают разные значения при использовании в качестве выражений. Суффиксная операция действует так, что значение переменной изменяется после возврата значения выражения, а префиксная операция действует таким образом, что вначале изменяется значение, а затем переменной возвращается новое значение. Указанное различие можно обнаружить, используя операции декремента и инкремента в операторах присваивания:

Код PHP $count = 0; $result = $count++; echo "Результат инкремента $count++: ".$result."
"; $count = 0; $result = ++$count; echo "Результат инкремента ++$count: ".$result."
";

Приведенные операторы формируют следующий вывод в окне браузера:

Операции инкремента

В этом примере оператор $result = $count++ полностью эквивалентен операторам:

Код PHP $result = $count; $count = $count + 1;

Наряду с этим оператор $result = ++$count эквивалентен таким операторам:

Код PHP $count = $count +1; $result = $count;

Операции присваивания

Операции инкремента (и декремента) позволяют уменьшить объем кода, необходимого для добавления единицы к значению переменной, но не позволяют сократить объем кода, в котором переменной присваивается результат сложения ее значения с другим числом или результат выполнения других арифметических действий. К счастью, все пять арифметических операций имеют соответствующие им операции присваивания (+=, -=, *=, /= и %=), позволяющие присвоить переменной в одном кратком выражении результат выполнения арифметической операции над значением этой переменной. Например, оператор

Код PHP $count = $count * 3;

может быть сокращенно представлен таким

Код PHP $count *= 3;

Простые математические функции

Следующий этап усложнения программы по сравнению с той, в которой применяются только арифметические операции, состоит в использовании всевозможных функций. Функции позволяют выполнять такие задачи, как преобразование из одного числового типа в другой (см. статью "Типы данных") и поиск минимального или максимального числа во множестве чисел. В следующей таблице представлены простые математические функции:

Простые математические функции PHP
Функция Описание
floor() Принимает единственный фактический параметр (как правило, число с плавающей точкой двойной точности) и возвращает наибольшее целое число, которое меньше или равно этому фактическому параметру (округление в меньшую сторону)
ceil() Имя этой функции представляет собой сокращение от слова ceiling (потолок). Функция принимает единственный фактический параметр (как правило, число с плавающей точкой двойной точности) и возвращает наименьшее целое число, которое больше или равно этому фактическому параметру (округление в большую сторону)
round() Принимает единственный фактический параметр (как правило, число с плавающей точкой двойной точности) и возвращает ближайшее целое число
abs() Модуль числа. Если единственный числовой фактический параметр имеет отрицательное значение, то функция возвращает соответствующее положительное число; если фактический параметр является положительным, то функция возвращает сам фактический параметр
min() Принимает любое количество числовых фактических параметров (но не менее одного) и возвращает наименьшее из всех значений фактических параметров
max() Принимает любое количество числовых фактических параметров (но не менее одного) и возвращает наибольшее из всех значений фактических параметров

Например, результат следующего выражения равен 3, поскольку значение каждого выражения с вызовом функции также равно 3:

Код PHP $result = min(3, abs(-3), max(round(2.7), ceil(2.3), floor(3.9)));

Выработка случайных чисел

В языке PHP применяются два генератора случайных чисел (вызываемых соответственно с помощью функций rand() и mt_rand() ). С каждым из этих генераторов связаны по три функции одинакового назначения: функция задания начального значения (srand() и mt_srand() ), сама функция получения случайного числа и функция, осуществляющая выборку наибольшего целого числа, которое может быть возвращено генератором ((getrandmax() и mt_getrandmax() )). Функции getrandmax() и mt_getrandmax() возвращают значение наибольшего числа, которое может быть возвращено функцией rand() или mt_rand(), на платформах Windows это значение ограничено величиной 32768.

Выбор конкретной функции выработки псевдослучайных чисел, которая используется в функции rand(), может зависеть от того, с какими именно библиотеками был откомпилирован интерпретатор PHP. В отличие от этого в генераторе mt_rand() всегда используется одна и та же функция выработки псевдослучайных чисел (mt - сокращение от Mersenne Twister), причем автор оперативной документации к функции mt_rand() утверждает, что эта функция к тому же является более быстродействующей и "более случайной" (с точки зрения криптографии), чем rand(). У нас нет оснований сомневаться в истинности этих утверждений, поэтому мы предпочитаем использовать функцию mt_rand(), а не rand().

При использовании некоторых версий PHP для некоторых платформ создается впечатление, что функции rand() и mt_rand() вырабатывают на первый взгляд вполне приемлемые случайные числа, даже без предварительного задания начального значения. Но такому впечатлению не следует доверять. Во-первых, программы, в которых используются функции выработки случайных чисел без задания начального значения, невозможно легко переносить на другие платформы, а, во-вторых, надежная работа указанных функций без задания начального значения не гарантируется.

Типичный способ задания начального значения для любого из генераторов случайных чисел PHP (с использованием функции mt_srand() или srand()) заключается в следующем:

Код PHP mt_srand((double)microtime()*1000000);

В этом операторе задается начальное значение генератора, равное количеству микросекунд, истекших к данному времени с момента отсчета последней целой секунды. (Приведение типа к типу double в этом операторе действительно необходимо, поскольку функция microtime() возвращает строку, которая рассматривается как целое число в операции умножения, но не в операции передачи параметров в функцию.) Рекомендуем читателю вводить указанный оператор задания начального значения, даже если ему не совсем понятно назначние этого оператора; достаточно просто поместить данный оператор на каждую страницу PHP, всего лишь один раз, перед использованием соответствующей функции mt_rand() или rand(), и этот оператор будет гарантировать, что отправная точка изменится и поэтому каждый раз будут вырабатываться различные случайные последовательности.

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

Очевидно, что указанные функции выработки псевдослучайных чисел возвращают только целые числа, но случайное целое число из заданного диапазона можно легко преобразовать в соответствующее число с плавающей точкой (скажем, в число из диапазона от 0.0 до 1.0 включительно) с помощью выражения наподобие rand() / getrandmax(). После этого указанный диапазон можно масштабировать и сдвигать по мере необходимости. Ниже показан пример:

Код PHP // Допустим нам нужно сгенерировать случайное число от 100.0 до 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); echo $random."
"; // Выработка целых чисел (100 - 120); echo round($random);

Попробуйте обновить страницу с этим кодом несколько раз, чтобы убедиться в генерации случайных чисел.

Математические константы

В PHP версии 4.0 существовала только одна математическая константа, описанная в документации - M_PI (значение числа π, представленное в виде числа с плавающей точкой двойной точности). А начиная с версии PHP 4.0.2 было введено много новых констант. Большинство этих новых констант относились к числу π (или к кратным ему значениям), числу e (или к кратным ему значениям), а также к квадратным корням; кроме того, некоторые константы относились к другим типам. Но в следующих выпусках по ряду причин список констант снова сократился до сравнительно небольшого количества заранее заданных математических констант:

Математические константы PHP
Константа Описание
M_PI π
M_PI_2 π / 2
M_PI_4 π / 4
M_1_PI 1 / π
M_2_PI 2 / π
M_2_SQRTPI 2 / sqrt(π)
M_E e
M_SQRT2 sqrt(2)
M_SQRT1_2 1 / sqrt(2)
M_LOG2E log 2 (e)
M_LOG10E lg(e)
M_LN2 log e (2)
M_LN10 log e (10)

Проверка формата чисел

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

Первая и наиболее простая проверка заключается в использовании функции is_numeric() . Как и при осуществлении большинства других таких проверок, функция is_numeric возвращает булев результат - true, если переданный ей параметр представляет собой числовые данные любого типа (со знаком или без знака, целочисленные или с плавающей точкой) либо математическое выражение, которое возвращает допустимое числовое значение.

С помощью функций is_int() и is_float можно определить является ли число целым или дробным. Еще две проверки являются немного более сложными: функции is_finite() и is_infinite() позволяют выполнить именно те проверки, на которые указывают их имена (является ли число конечным или бесконечным). Но, строго говоря, диапазон значений, на которые распространяются эти функции, не может включать актуальной бесконечности (и может ли вообще быть проверено, имеет ли числю бесконечно большое значение?). Вместо этого используются пределы диапазона значений с плавающей точкой, допустимые в конкретной системе.

Ниже показан пример использования этих функций:

Код PHP is_numeric(4); // true is_numeric(25 - 6); // true is_numeric("25"); // true is_numeric("25 - 6"); // false is_int(4); // true is_int(4.2); // false is_int("4"); // false - данная проверка строже, чем проверка с помощью функции is_numeric() is_float(4); // false is_float(4.0); // true is_float(M_PI); // true

Преобразование систем счисления

По умолчанию в языке PHP для прямого и обратного преобразования числовых значений из внешнего представления во внутреннее применяется основание системы счисления 10. Кроме того, можно сообщить интерпретатору PHP, что во внешнем представлении используются восьмеричные числа, заданные по основанию 8 (для этого перед числом необходимо ввести ведущий 0), или шестнадцатеричные числа, заданные по основанию 16 (для этого перед числом необходимо ввести префикс 0x).

Безусловно, после преобразования чисел из внешнего представления во внутреннее они хранятся в памяти в двоичном формате, а все основные арифметические и математические вычисления осуществляются в самой операционной системе по основанию 2. Кроме того, в языке PHP предусмотрен ряд функций для преобразования чисел из одного основания системы счисления в другое. Общие сведения об этих функциях приведены в таблице ниже:

Функции преобразования систем счисления
Функция Описание
BinDec() Принимает единственный строковый параметр, представляющий собой двоичное целое число (число по основанию 2), и возвращает строковое представление этого числа по основанию системы счисления 10
DecBin() Аналогична BinDec(), но преобразует из основания системы счисления 10 в основание системы счисления 2
OctDec() Аналогична BinDec(), но преобразует из основания системы счисления 8 в основание системы счисления 10
DecOct() Аналогична BinDec(), но преобразует из основания системы счисления 10 в основание системы счисления 8
HexDec() Аналогична BinDec(), но преобразует из основания системы счисления 16 в основание системы счисления 10
DecHex() Аналогична BinDec(), но преобразует из основания системы счисления 10 в основание системы счисления 16
base_convert() Принимает строковый параметр (представляющий целое число, которое подлежит преобразованию) и два целочисленных параметра (исходное и желаемое основание). Возвращает строку, представляющую преобразованное число. В этой строке цифры старше, чем 9 (от 10 до 35), представлены символами a-z. И исходное, и желаемые основания должны находиться в пределах 2-36

Все функции преобразования систем счисления являются функциями специального назначения, преобразующими числа из одного конкретного основания в другое. Исключением является функция base_convert(), которая принимает произвольные параметры с обозначением начального и результирующего основания.

Обратите внимание на то, что все функции преобразования систем счисления принимают строковые параметры и возвращают строковые значения, но можно использовать десятичные числовые параметры и полагаться на правильное выполнение преобразования типа интерпретатором PHP. Иными словами, варианты вызова DecBin("1234") и DecBin(1234) приводят к получению одинакового результата.

Экспоненты и логарифмы

Язык PHP включает стандартные экспоненциальные и логарифмические функции двух разноввдностей - для работы по основанию 10 и основанию е (которые приведены в таблице).

В языке PHP предусмотрена функция exp() для возведения числа e в указанную степень, но отсутствует функция с одним параметром, с помощью которой можно было бы возвести в указанную степень число 10. Однако вместо этой функции можно использовать функцию pow() с двумя параметрами, задавая 10 в качестве первого параметра.

Можно убедиться в том, что экспоненциальные и логарифмические функции с одним и тем же основанием являются обратными по отношению друг к другу, проведя проверку идентичности полученных результатов таким образом:

Код PHP $test_449 = 449.0; $test_449 = pow(10, exp(log(log10($test_449)))); echo "test_449 = $test_449"; // test_449 = 449

Тригонометрические функции

В языке PHP предусмотрен стандартный набор основных тригонометрических функций, общие сведения о которых приведены в таблице:

Тригонометрические функции
Функция Описание
pi() Не принимает параметров и возвращает приближенное значение числа π (3.1415926535898). Может использоваться как взаимозаменяемая с константой M_PI
sin() Принимает числовой параметр в радианах и возвращает синус параметра в виде числа с плавающей точкой двойной точности
cos() Принимает числовой параметр в радианах и возвращает косинус параметра в виде числа с плавающей точкой двойной точности
tan() Принимает числовой параметр в радианах и возвращает тангенс параметра в виде числа с плавающей точкой двойной точности
asin() Принимает числовой параметр и возвращает арксинус параметра в радианах. Входные данные должны находиться в пределах от -1 до 1 (получение функцией входных данных, выходящих за пределы этого диапазона, приводит к получению результата NAN). Результаты находятся в диапазоне от -π/2 до π/2
acos() Принимает числовой параметр и возвращает арккосинус параметра в радианах. Входные данные должны находиться в пределах от -1 до 1 (получение функцией входных данных, выходящих за пределы этого диапазона, приводит к получению результата NAN. Результаты находятся в диапазоне от 0 до π
atan() Принимает числовой параметр и возвращает арктангенс параметра в радианах. Результаты находятся в диапазоне от -π/2 до π/2

Ниже показан пример составления таблицы вычисления тригонометрических функций для "стандартных" углов:

Код PHP function display_trigonometry($func_array, $input_array) { // Заголовок функции echo ""; } echo ""; // Вывести остальную часть таблицы foreach($input_array as $input) { echo ""; foreach($func_array as $func) { echo ""; } echo ""; } echo "
Значение/функция$func
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); echo "
"; } display_trigonometry(array("sin", "cos", "tan"), array(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Пример использования тригонометрических функций в PHP

Получение очень больших (но не бесконечных) значений тангенса обусловлено тем, что теоретически знаменатели должны быть равными нулю, но в действительности немного отличаются от нуля из-за ошибок округления.

Вычисление с произвольной точностью (с использованием функций BC)

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

Безусловно, точные диапазоны значений данных этих типов могут зависеть от архитектуры серверного компьютера, но значения целых чисел обычно могут находиться в пределах от -2 31 -1 до 2 31 -1, а числа с плавающей точкой двойной точности могут представлять числа с точностью примерно от 13 до 14 десятичных цифр. С другой стороны, для решения задач, требующих использования более широкого диапазона представления или большей точности, в языке PHP предусмотрены математические функции с произвольной точностью (называемые также функциями BC - по имени вычислительной утилиты с произвольной точностью, основанной на средствах системы Unix).

Может оказаться, что функции с произвольной точностью не включены в компиляцию интерпретатора PHP, особенно если пользователь проводил такую компиляцию самостоятельно, поскольку для этого пользователь должен был знать, что на этапе настройки конфигурации необходимо включить в состав параметров флажок --enable-bcmath . Чтобы проверить, имеется ли доступ к указанным функциям, попытайтесь вычислить выражение bcadd("1","1"). Если будет получено сообщение об ошибке, в котором говорится о неопределенной функции, то вам потребуется снова настроить конфигурацию и перекомпилировать интерпретатор PHP.

В функциях BC в качестве параметров и возвращаемых значений используются не числовые типы с представлением фиксированной длины, а строки. Поскольку в языке PHP длина строк ограничивается только объемом доступной памяти, числа, используемые в расчетах, могут иметь любую длину. Основополагающие вычисления осуществляются в десятичном виде и во многом напоминают те, которые может выполнить и человек с помощью карандаша и бумаги (если сможет действовать очень быстро и запасется терпением). Функции BC, оперирующие целыми числами, действуют точно и позволяют использовать столько цифр, сколько потребуется, а в функциях, оперирующих числами с плавающей точкой, вычисления выполняются с точностью до заданного количества десятичных разрядов. Общие сведения о функциях BC приведены в таблице ниже:

Математические функции с произвольной точностью (функции BC)
Функция Описание
bcadd() Принимает два строковых параметра, представляющих числа, и необязательный целочисленный параметр с обозначением масштабного множителя. Возвращает сумму первых двух параметров в виде строки, с количеством десятичных позиций в результате, определяемом параметром с обозначением масштабного множителя. Если параметр с обозначением масштабного множителя не задан, то используется заданный по умолчанию масштабный множитель
bcsub() Аналогична bcadd(), за исключением того, что возвращает результат вычитания второго параметра от первого
bcmui() Аналогична bcadd(), за исключением того, что возвращает результат умножения своих параметров
bcdiv() Аналогична bcadd(), за исключением того, что возвращает результат деления первого параметра на второй
bcmod() Возвращает модуль (остаток) от деления первого параметра на второй. Поскольку возвращаемое значение относится к целочисленному типу, функция не принимает параметр с обозначением масштабного множителя
bcpow() Возводит первый параметр в степень, указанную вторым параметром. Количество десятичных позиций в результате определяется масштабным множителем, если он задан
bcsqrt() Возвращает квадратный корень параметра с количеством десятичных позиций, которое определяется значением необязательного масштабного множителя
bcscale() Устанавливает заданный по умолчанию масштабный множитель для последующих вызовов функции BC

Большинство из этих функций принимают в качестве последнего параметра необязательный масштабный множитель (целое число), который определяет, какое количество десятичных позиции должно быть в результате. Если такой параметр не задан, то в качестве масштабного множителя используется заданный по умолчанию масштабный множитель, который, в свою очередь, может быть установлен путем вызова функции bcscale(). Заданная по умолчанию величина для этого заданного по умолчанию значения (т.е. величина, которая используется, если в сценарии не применяется вызов функции bcscale()) может быть также задана в файле инициализации php.ini.

Ниже приведен пример использования функции с произвольной точностью для точного выполнения целочисленных арифметических операций. Выполнение следующего кода:

Код PHP for ($x = 1; $x < 25; $x++) { echo "$x$x = ".bcpow($x, $x)."
"; }
Точное вычисление астрономических величин с помощью функций BC

Если бы для этих вычислений использовался обычный целочисленный тип PHP, то переполнение целого числа произошло бы задолго до конца вычисления, поэтому в остальной части цикла расчеты выполнялись бы в целях получения приближенного числа с плавающей точкой.

Массивы Обработка форм 1 2 3 4 5 6 7 8 9 10

Последнее обновление: 1.11.2015

В PHP мы можем использовать различные операторы: арифметические, логические и т.д. Рассмотрим каждый тип операций.

Арифметические операции

    + (операция сложения)

    Например, $a + 5

    - (операция вычитания)

    Например, $a - 5

    * (умножение)

    Например, $a * 5

    / (деление)

    Например, $a / 5

    % (получение остатка от деления)

    Например: $a=12; echo $a % 5; // равно 2

    ++ (инкремент/ увеличение значения на единицу)

    Например, ++$a

    Важно понимать разницу между выражениями ++$a и $a++ . Например:

    $a=12; $b=++$a; // $b равно 13 echo $b;

    Здесь сначала к значению переменной $a прибавляется единица, а затем ее значение приравнивается переменной $b. Иначе было бы, если бы выражение выглядело так: $b=$a++; . Здесь сначала значение переменной $a приравнивалось переменной $b, а затем происходило увеличение значения переменной $a.

    -- (декремент/ уменьшение значения на единицу)

    Например, --$a . И также, как и в случае с инкрементом, существуют два вида записи: --$a и $a--

Операции присваивания

    Приравнивает переменной определенное значение: $a = 5

    Сложение с последующим присвоением результата. Например: $a=12; $a += 5; echo $a; // равно 17

    Вычитание с последующим присвоением результата. Например: $a=12; $a -= 5; echo $a; // равно 7

    Умножение с последующим присвоением результата: $a=12; $a *= 5; echo $a; // равно 60

    Деление с последующим присвоением результата: $a=12; $a /= 5; echo $a; // равно 2.4

    Объединение строк с присвоением результата. Применяется к двум строкам. Если же переменные хранят не строки, а, к примеру, числа, то их значения преобразуются в строки и затем проводится операция: $a=12; $a .= 5; echo $a; // равно 125 // идентично $b="12"; $b .="5"; // равно 125

    Получение остатка от деления с последующим присвоением результата: $a=12; $a %= 5; echo $a; // равно 2

Операции сравнения

Операции сравнения, как правило, применяются в условных конструкциях, когда надо сравнивать два значения, и в зависимости от результата сравнения выполнить некоторые действия. Имеются следующие операции сравнения.

    Оператор равенства сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a == 5

    Оператор тождественности также сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a === 5

    Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a != 5

    Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a !== 5

    Сравнивает два значения, и если первое больше второго, то возвращает true, иначе возвращает false: $a > 5

    Сравнивает два значения, и если первое меньше второго, то возвращает true, иначе возвращает false: $a < 5

    Сравнивает два значения, и если первое больше или равно второму, то возвращает true, иначе возвращает false: $a >= 5

    Сравнивает два значения, и если первое меньше или равно второму, то возвращает true, иначе возвращает false: $a <= 5

Оператор равенства и тождественности

Оба оператора сравнивают два выражения и возвращают true, если выражения равны. Но между ними есть различия. Если в операции равенства принимают два значения разных типов, то они приводятся к одному - тому, который интерпретатор найдет оптимальным. Например:

Очевидно, что переменные хранят разные значения разных типов. Но при сравнении они будут приводится к одному типу - числовому. И переменная $a будет приведена к числу 22. И в итоге обе переменных окажутся равны.

Или, например, следующие переменные также будут равны:

$a = false; $b = 0;

Чтобы избежать подобных ситуаций используется операция эквивалентности, которая учитывает не только значение, но и тип переменной:

$a = "22a"; $b = 22; if($a===$b) echo "равны"; else echo "не равны";

Теперь переменные будут не равны.

Аналогично работают операторы неравенства!= и!== .

Логические операции

Логические операции обычно применяются для объединения результатов двух операций сравнения. Например, нам надо выполнить определенное действие, если истинны будут несколько условий. Имеются следующие логические операции:

    Возвращает true, если обе операции сравнения возвращают true, иначе возвращает false: $a == 5 && $b = 6

    Аналогично операции && : $a == 5 and $b > 6

    Возвращает true, если хотя бы одна операция сравнения возвращают true, иначе возвращает false: $a == 5 || $b = 6

    Аналогично операции || : $a < 5 or $b > 6

    Возвращает true, если операция сравнения возвращает false: !($a >= 5)

    Возвращает true, если только одно из значений равно true. Если оба равны true или ни одно из них не равно true, возвращает false. Например: $a=12; $b=6; if($a xor $b) echo "true"; else echo "false";

    Здесь результат логической операции будет false , так как обе переменных имеют определенное значение. Изменим код:

    $a=12; $b=NULL; if($a xor $b) echo "true"; else echo "false";

    Здесь уже результат будет true , так как значение одной переменной не установлено. Если переменная имеет значение NULL, то в логических операциях ее значение будет рассматриваться как false

Битовые операции

Битовые операции производятся над отдельными битами числа. Числа рассматриваются в двоичном представлении, например, 2 в двоичном представлении 010, число 7 - 111.

    & (логическое умножение)

    Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // равно 4

    Здесь число 4 в двоичной системе равно 100, а число 5 равно 101. Поразрядно умножим числа и получим (1*1, 0*0, 0 *1) = 100, то есть число 4 в десятичном формате.

    | (логическое сложение)

    Похоже на логическое умножение, операция также производится по двоичным разрядам, но теперь возвращается единица, если хотя бы у одного числа в данном разряде имеется единица. Например: $a1 = 4; //100 $b1 = 5; //101 echo $a1 | $b1; // равно 5

    ~ (логическое отрицание)

    инвертирует все разряды: если значение разряда равно 1, то оно становится равным нулю, и наоборот. $b = 5; echo ~$b;

    x<

    x>>y - сдвигает число x вправо на y разрядов. Например, 16>>1 сдвигает число 16 (которое в двоичном представлении 10000) на один разряд вправо, то есть в итоге получается 1000 или число 8 в десятичном представлении

Объединение строк

Для объединения строк используется оператор "точка". Например, соединим несколько строк:

$a="Привет, "; $b=" мир"; echo $a . $b . "!";

Если переменные представляют не строки, а другие типы, например, числа, то их значения преобразуются в строки и затем также происходит операция объединения строк.

Операции с переменными PHP (операторы)

Для осуществления существуют различные группы.

Оператором называется нечто, состоящее из одного или более значений (выражений , если говорить на жаргоне программирования), которое можно вычислить как новое значение (таким образом, вся конструкция может рассматриваться как выражение). Отсюда следует, что функции или любые другие конструкции, которые возвращают значение (например, print() ) являются операторами, в отличие от всех остальных языковых конструкций (например, echo() ), которые ничего не возвращают.

Арифметические операции в PHP

Помните школьные основы арифметики? Описанные ниже операторы работают так же.

Операция деления ("/") всегда возвращает вещественный тип, даже если оба значения были целочисленными (или строками, которые преобразуются в целые числа). В противном случае результат будет дробным.

Операция вычисления остатка от деления "% " работает только с целыми числами, так что применение ее к дробным может привести к нежелательному результату.

Возможно использование скобок. Приоритет одних математических операций над другими и изменение приоритетов при использовании скобок в арифметических выражениях соответствуют обычным математическим правилам.

Операции инкремента и декремента

PHP, аналогично C, поддерживает префиксные и постфиксные операторы инкремента и декремента.

Постфиксные операторы инкремента и декремента

Как и в языке Си, эти операторы увеличивают или уменьшают значение переменной, а в выражении возвращают значение переменной $a до изменения. Например:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Выводит a=11, b=10

Как видите, сначала переменной $b присвоилось значение переменной $a , а уж затем последняя была инкрементирована. Впрочем, выражение, значение которого присваивается переменной $b , может быть и сложнее - в любом случае, инкремент $a произойдет только после его вычисления.

Префиксные операторы инкремента и декремента

Существуют также операторы инкремента и декремента, которые указываются, а не после имени переменной. Соответственно, и возвращают они значение переменной уже после изменения. Пример:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Выводит a=9, b=9

Операции инкремента и декремента на практике применяются очень часто. Например, они встречаются практически в любом цикле for .

echo "

Постфиксный инкремент

" ;
$a = 5 ;
echo "Должно быть 5: " . $a ++ . "
\n" ;

\n" ;

Echo "

Префиксный инкремент

" ;
$a = 5 ;
echo "Должно быть 6: " . ++ $a . "
\n" ;
echo "Должно быть 6: " . $a . "
\n" ;

Echo "

Постфиксный декремент

" ;
$a = 5 ;
echo "Должно быть 5: " . $a -- . "
\n" ;

\n" ;

Echo "

Префиксный декремент

" ;
$a = 5 ;
echo "Должно быть 4: " . -- $a . "
\n" ;
echo "Должно быть 4: " . $a . "
\n" ;
?>

Строковые операции

В PHP есть два оператора для работы со строками. Первый - оператор конкатенации ("."), который возвращает объединение левого и правого аргумента. Второй - оператор присвоения с конкатенацией, который присоединяет правый аргумент к левому. Приведем конкретный пример:

$a = "Hello " ;
$b = $a . "World!" ; // $b содержит строку "Hello World!"

$a = "Hello " ;
$a .= "World!" ; // $a содержит строку "Hello World!"
?>

Побитовые операции

Эти операции предназначены для работы (установки/снятия/проверки) групп битов в целой переменной. Биты целого числа - это не что иное, как отдельные разряды того же самого числа, записанного в двоичной системе счисления. Например, в двоичной системе число 12 будет выглядеть как 1100, а 2 - как 10, так что выражение 12|2 вернет нам число 14 (1110 в двоичной записи). Если переменная не целая, то она вна-
чале округляется, а уж затем к ней применяются перечисленные ниже операторы.

Для представления одного числа используются 32 бита:

  • 0000 0000 0000 0000 0000 0000 0000 0000 - это ноль;
  • 0000 0000 0000 0000 0000 0000 0000 0001 - это 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 - это 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 - это 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 - это 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 - это 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 - это 15;

Побитовые операторы:

Пример Название Результат
$a & $b Побитовое "и" Устанавливаются только те биты, которые установлены и в $a, и в $b.
$a | $b Побитовое "или" Устанавливаются те биты, которые установлены либо в $a, либо в $b.
$a ^ $b Исключающее или Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b
~ $a Отрицание Устанавливаются те биты, которые в $a не установлены, и наоборот.
$a << $b Сдвиг влево Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает "умножение на 2")
$a >> $b Сдвиг вправо Все биты переменной $a сдвигаються на $b позиций вправо (каждая позиция подразумевает "деление на 2")

Операции сравнения

Операторы сравнения, как это видно из их названия, позволяют сравнивать между собой два значения.

Это в своем роде уникальные операции, потому что независимо от типов своих аргументов они всегда возвращают одно из двух: false или true . Операции сравнения позволяют сравнивать два значения между собой и, если условие выполнено, возвращают true , а если нет - false .

В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP сравнивать нельзя. Их даже нельзя сравнивать на равенство (при помощи оператора ==), но при выполнении такой операции PHP не выдает предупреждения. Так что удивившись как-то раз, почему два совершенно разных массива при сравнении их с помощью == оказываются вдруг одинаковыми, вспомните, что перед сравнением оба операнда преобразуются в слово array , которое потом и сравнивается.

Подробно о сравнении массивов смотрите .

Операторы сравнения:

Пример Название Результат
$a == $b Равно TRUE если $a равно $b.
$a === $b Тождественно равно TRUE если $a равно $b и имеет тот же тип. (Добавлено в PHP 4)
$a != $b Не равно TRUE если $a не равно $b.
$a <> $b Не равно TRUE если $a не равно $b.
$a !== $b Тождественно не равно TRUE если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4)
$a < $b Меньше TRUE если $a строго меньше $b.
$a > $b Больше TRUE если $a строго больше $b.
$a <= $b Меньше или равно TRUE если $a is меньше или равно $b.
$a >= $b Больше или равно TRUE если $a больше или равно $b.

Логические операции

Логические операторы предназначены исключительно для работы с логическими выражениями и также возвращают false или true .

Приведем таблицу логических операторов PHP:

Следует заметить, что вычисление логических выражений, содержащих такие операторы, идет всегда слева направо, при этом, если результат уже очевиден (например, false&&что-то всегда дает false ), то вычисления обрываются, даже если в выражении присутствуют вызовы функций. Например, в операторе $logic = 0&&(time()>100); стандартная функция time() никогда не будет вызвана.

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

Операторы инкремента (++) и декремента (--) не работают с логическими переменными.

Операторы эквивалентности

В PHP, начиная с PHP4 есть оператор тождественного сравнения - тройной знак равенства === ,
или оператор проверки на. PHP довольно терпимо относится к тому, что строки неявно преобразуются в числа, и наоборот.
Например, следующий код выведет, что значения переменных равны:

$a=10;
$b="10";

И это несмотря на то, что переменная $a представляет собой число, а $b - строку. Пеперь рассмотрим несколько другой пример:

$a=0; // ноль
$b=""; // пустая строка
if($a==$b) echo "a и b равны"; // Выводит "a и b равны"

Хотя $a и $b явно не равны даже в обычном понимании этого слова, скрипт заявит, что они совпадают. Почему так происходит? Дело в том, что если один из операндов логического оператора может трактоваться как число, то оба операнда трактуются как числа. При этом пустая строка превращается в 0 , который затем и сравнивается с нулем. Неудивительно, что оператор echo срабатывает.
Проблему решает оператор эквивалентности === (тройное равенство). Он не только сравнивает два выражения, но также их типы. Перепишем наш пример с использованием этого оператора.



error: Контент защищен !!