Оглавление

12. Преобразование типов данных

Что будет, если к числу прибавить строку?

$Str = "5"; // Строка
$Number = 3; // Число
$Str2 = $Number + $Str; // Переменная содержит число 8
$Str3 = $Str + $Number; // Переменная содержит число 8

Результат будет абсолютно другим, нежели в JavaScript, так как оператор + в PHP не используется для конкатенации строк. В  этом случае интерпретатор попытается  преобразовать  переменные  к одному типу  данных,  а  затем  выполнить  операцию. В нашем  случае переменная $Str, имеющая  тип string (строка), будет преобразована к типу integer (число), а затем будет произведена операция сложения двух чисел.

 
 Но что будет, если строку невозможно преобразовать в число?

$Str = "Привет"; // Строка
$Number = 3; // Число
$Str2 = $Number + $Str; // Переменная содержит число 3
$Str3 = $Str + $Number; // Переменная содержит число 3

Как видим, строка, не содержащая числа, преобразуется к числу 0. А что бу-
дет, если из числа вычесть строку, число умножить на строку или число раз-
делить на строку?

$Number = 15;
$Str = "5";
$Str2 = $Number - $Str; // Переменная содержит число 10
$Str3 = $Number * $Str; // Переменная содержит число 75
$Str4 = $Number / $Str; // Переменная содержит число 3

Итак,  интерпретатор  попытается  преобразовать  строку  в  число,  а  затем  вычислить выражение. 

 

В какой последовательности будут указаны число и строка, не важно:

$Str5 = $Str * $Number; // Переменная все равно содержит число 75

Но что будет, если в строке будут одни буквы?

$Number = 15;
$Str = "Строка";
$Str2 = $Number - $Str; // Переменная содержит число 15
$Str3 = $Str - $Number; // Переменная содержит число -15
$Str4 = $Number * $Str; // Переменная содержит число 0
$Str5 = $Str * $Number; // Переменная содержит число 0
$Str6 = $Number / $Str; // Ошибка деления на 0
$Str7 = $Str / $Number; // Переменная содержит число 0

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

 

Для преобразования типов данных можно использовать функцию settype(), которая преобразует тип переменной в указанный:
settype(<Переменная>, <Тип>);
Например:

$Number = 15;
$Str = "5";
settype($Number, "string");
settype($Str, "integer");

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

$Str = "5"; // Строка
$Number = 3; // Число
$Str2 = $Number + (integer)$Str; // Переменная содержит число 8
echo gettype($Str); // выведет string

Такой же результат можно получить при использовании следующих функций:
intval(<Переменная>);
doubleval(<Переменная>);
strval(<Переменная>);
Например:

$Str = "5"; // Строка
$Number = 3; // Число
$Str2 = $Number + intval($Str); // Переменная содержит число 8
echo gettype($Str); // выведет string

Примечания:
  • ОБРАТИТЕ ВНИМАНИЕ
    В отличие от функции settype() приведение  типов не меняет тип исходной переменной.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити