PHP: Манипуляции с типами — Manual
Манипуляции с типами
PHP не требует (и не поддерживает) явного типа при определении переменной;
тип переменной определяется по контексту, в котором она используется.
То есть, если вы присвоите значение типа string
переменной $var, то $var изменит тип
на string.
Если вы затем присвоите $var значение типа integer,
она станет целым числом (integer).
Примером автоматического преобразования типа является оператор
умножения ‘*’. Если какой-либо из операндов является float,
то все операнды интерпретируются как float,
и результатом также будет float. В
противном случае операнды будут интерпретироваться как integer
и результат также будет integer. Обратите внимание, что это
НЕ меняет типы самих операндов;
меняется только то, как они вычисляются и сам тип выражения.
<?php
$foo = "1"; // $foo - это строка (ASCII-код 49)
$foo *= 2; // $foo теперь целое число (2)
$foo = $foo * 1.3; // $foo теперь число с плавающей точкой (2.6)
$foo = 5 * "10 Little Piggies"; // $foo - это целое число (50)
$foo = 5 * "10 Small Pigs"; // $foo - это целое число (50)
?>
Если последние два примера вам непонятны, смотрите
Преобразование строк в числа.
Если вы хотите, чтобы переменная принудительно вычислялась как
определенный тип, смотрите раздел приведение
типов. Если вы хотите изменить тип переменной, смотрите
settype().
Если вы хотите протестировать любой из примеров, приведенных в
данном разделе, вы можете использовать функцию
var_dump().
Замечание:
Поведение автоматического преобразования в массив в настоящий
момент не определено.К тому же, так как PHP поддерживает индексирование в строках аналогично
смещениям элементов массивов, следующий пример будет верен для всех версий PHP:
<?php
$a = 'car'; // $a - это строка
$a[0] = 'b'; // $a все еще строка
echo $a; // bar
?>Более подробно смотрите в разделе Доступ к символу
в строке.
Приведение типов
Приведение типов в PHP работает так же, как и в C: имя требуемого
типа записывается в круглых скобках перед приводимой переменной.
<?php
$foo = 10; // $foo - это целое число
$bar = (boolean) $foo; // $bar - это булев тип
?>
Допускаются следующие приведения типов:
- (int), (integer) — приведение к integer
- (bool), (boolean) — приведение к boolean
- (float), (double), (real) — приведение к float
- (string) — приведение к string
- (array) — приведение к array
- (object) — приведение к object
- (unset) — приведение к NULL
Приведение типа (binary) и поддержка префикса b были добавлены в PHP 5.2.1. Обратите внимание, что (binary) по существу то же самое, что и (string), но не
следует полагаться на этот тип приведения.
Приведение типа (unset) объявлено устаревшим с PHP 7.2.0. Обратите внимание, что приведение типа (unset)
это то же самое, что присвоение NULL переменной. Тип приведения
(unset) будет удален в PHP 8.0.0.
Обратите внимание, что внутри скобок допускаются пробелы и
символы табуляции, поэтому следующие примеры равносильны по своему
действию:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Приведение строковых литералов и переменных к бинарным строкам:
<?php
$binary = (binary) $string;
$binary = b"binary string";
?>
Замечание:
Вместо использования приведения переменной к string, можно также заключить
ее в двойные кавычки.
<?php
$foo = 10; // $foo - это целое число
$str = "$foo"; // $str - это строка
$fst = (string) $foo; // $fst - это тоже строка// Это напечатает "они одинаковы"
if ($fst === $str) {
echo "они одинаковы";
}
?>
Может быть не совсем ясно, что именно происходит при приведении между типами.
Для дополнительной информации смотрите разделы:
www.php.net
Манипуляции с типами в PHP
Приведение типов в PHP
Поскольку PHP относится к языкам программирования с нестрогой типизацией данных,
довольно часто получается так, что интерпретатор ожидает получить данные одного типа, а вместо этого получает данные другого типа. В таких случаях
он просто осуществляет преобразование полученных данных к нужному типу.
Приведением типа называется процесс преобразования значения одного типа в
значение другого типа.
Не смотря на то, что в большинстве случаев интерпретатор самостоятельно занимается приведением типов, у программиста также имеется возможность
устанавливать и изменять тип переменной при помощи
оператора приведения типа, который представляет собой имя типа в круглых скобках,
записываемое перед переменной. В PHP применяются следующие операторы приведения типа:
- (bool), (boolen) – приведение к логическому типу;
- (int), (integer) – приведение к целочисленному типу;
- (float), (double), (real) – приведение к вещественному типу;
- (string) – приведение к строковому типу;
- (array) – приведение к типу array;
- (object) – приведение к типу object;
- (unset) – приведение к NULL.
В ходе приведения типов, во избежание непредвиденных результатов, следует знать правила, по которым происходит преобразование данных одного типа
в другой. Перечислим их, после чего рассмотрим пример кода, содержащего данные преобразования типов.
Приведение к типу bool
Во время преобразования к типу bool следующие значения рассматриваются как
FALSE:
- само значение false,
- 0 и 0.0,
- пустая строка «» и строка «0»,
- массив без элементов (пустой массив) [],
- значение null,
- объект SimpleXML, созданный из пустых тегов.
Все остальные значения преобразуются в значение TRUE, включая значения типа
resource, а также число -1, поскольку оно представляет собой обычное
отрицательное число, отличное от нуля.
Приведение к типу integer
В случае привидения к типу integer:
-
Логическое значение true преобразуется в 1,
false – в 0. - Значение null преобразуется в 0.
-
Вещественные числа округляются вниз, т.е. в сторону нуля. Например, в случае приведения вещественного числа 7.9
к целочисленному типу оно будет преобразовано в число 7. При этом вещественное число не должно превышать
максимально допустимые для целых чисел размеры (смотреть)
иначе результат будет неопределенным, что вызвано отсутствием достаточной точности у вещественных чисел, чтобы вернуть верный результат.
Более того, в данном случае не будет выведено даже замечания. Также не стоит приводить неизвестную дробь к целочисленному типу во
избежание получения неожиданных результатов. Например, если привести к типу integer результат выражения
‘(0.1+0.7)*10’, то интерпретатор преобразует его в число 7, а не
8, как ожидалось. -
Если строка начинается с верной записи целого числа, то интерпретатор в процессе приведения строки к целочисленному
типу вернет это число, отбросив всю остальную часть строки. Если же строка является пустой «»
или начинается не с цифры, знака плюс ‘+’ или знака минус ‘-‘, она будет
преобразована в число 0. Например, строка ‘-25 яблок’ будет преобразована в
число -25, строка ‘3.5 яблока’ – в число
3, а строка ‘Яблок было 25’ – в число 0.
Для других типов данных приведение к целочисленному типу не определено, поэтому не стоит доверять текущему наблюдаемому поведению, так как оно
может измениться без предупреждения.
Приведение к типу float
В случае привидения к типу float для всех типов, за исключением строк, сперва
будет совершено преобразование в целочисленный тип, а уже потом целое число будет преобразовано в вещественное. Что касается строк, то:
-
если строка начинается с верной записи вещественного числа (включая
экспоненциальную форму записи), интерпретатор в процессе приведения строки к
вещественному типу вернет это число, отбросив всю остальную часть строки; -
если же строка является пустой «» или начинается не с цифры, знака плюс ‘+’,
знака минус ‘-‘ или символа точки ‘.’ (напомним, что при записи вещественных
чисел перед точкой ноль разрешается опускать), то она будет преобразована в число 0.
Например, строка ‘1.567e2 кг яблок’ будет преобразована в число 156.7, строка
‘.5 яблока’ – в число 0.5, а строка
‘Было 2.5 кг яблок’ – в число 0.
Приведение к типу string
В случае преобразования значений в строки (т.е. приведение к типу string):
-
Логическое значение true преобразуется в строку «1»,
false – в пустую строку «». -
Целое или вещественное число преобразуется в строку, состоящую из самого числа. При этом учитывается и показатель степени вещественного
числа. Например, число 1.567e2 будет преобразовано в строку
‘156.7’, а число .5 – в строку ‘0.5’. - Специальное значение null преобразуется в пустую строку «».
- Массивы всегда преобразуются в строку ‘Array’.
-
Ресурсы (данные типа resource) преобразуются в строку вида
«Resource id #№», где № – номер ресурса во время выполнения.
Приведение к типу array
В случае преобразования значения типа bool,
integer, float, string или
resource в массив, результатом будет массив с этим элементом, индекс которого будет равен
0.
Приведение к типу NULL
Явное приведение переменной к специальному значению null с использованием
конструкции ‘(unset) $var’ не удаляет переменную и ее значение, а только возвращает значение
null для дальнейшего использования.
Примеры приведения типов
Код, содержащий операции приведения типа, представлен в примере №1.
<?php //Присвоили логическое значение true $var_1=true; //Присвоили логическое значение false $var_2=false; //Теперь $var_1==1 $var_1=(integer) $var_1; //Теперь $var_2==0 $var_2=(integer) $var_2; //Теперь $var_1=="1" $var_1=(string) $var_1; //Теперь $var_2=="0" $var_2=(string) $var_2; //------------------------------------------------ //Присвоили строку "-1" $var_3="-1"; //Присвоили строку ".9345E3" $var_4=".9345E3"; //Теперь $var_3==1 $var_3=(bool) $var_3; //Теперь $var_4==0 $var_4=(integer) $var_4; //------------------------------------------------ //Присвоили строку "-.57" $var_5="-.57"; //Присвоили вещественное число, тоже самое, что и 934.5 $var_6=.9345E3; //Теперь $var_5==["-.57"] $var_5=(array) $var_5; //Теперь $var_6==[934.5] $var_6=(array) $var_6; ?>
Пример №1. Приведение типов переменных
Приведение к другим типам
Преобразование значений в тип resource не имеет смысла. Что касается приведения объектов к другим типам, а
также преобразования значений разных типов в объект, то о них мы поговорим позже в соответствующем разделе.
Быстрый переход к другим страницам
belarusweb.net
Манипуляции с типами | Руководство по PHP
PHP не требует (и не поддерживает) явного типа при определении переменной;
тип переменной определяется по контексту, в котором она используется.
То есть, если вы присвоите значение типа string
переменной $var, то $var станет строкой.
Если вы затем присвоите $var целочисленное значение, она станет целым числом.
Примером автоматического преобразования типа является оператор
сложения ‘+’. Если какой-либо из операндов является float,
то все операнды интерпретируются как float,
и результатом также будет float. В
противном случае операнды будут интерпретироваться как целые числа
и результат также будет целочисленным. Обратите внимание, что это
НЕ меняет типы самих операндов;
меняется только то, как они вычисляются и сам тип выражения.
<?php
$foo = "0"; // $foo это строка (ASCII 48)
$foo += 2; // $foo теперь целое число (2)
$foo = $foo + 1.3; // $foo теперь число с плавающей точкой (3.3)
$foo = 5 + "10 Little Piggies"; // $foo это целое число (15)
$foo = 5 + "10 Small Pigs"; // $foo это целое число (15)
?>
Если последние два примера вам непонятны, смотрите
Преобразование строк в числа.
Если вы хотите, чтобы переменная принудительно вычислялась как
определенный тип, смотрите раздел приведение
типов. Если вы хотите изменить тип переменной, смотрите
settype().
Если вы хотите протестировать любой из примеров, приведенных в
данном разделе, вы можете использовать функцию
var_dump().
Замечание:
Поведение автоматического преобразования в массив в настоящий
момент не определено.К тому же, так как PHP поддерживает индексирование в строках аналогично
смещениям элементов массивов, следующий пример будет верен для всех версий PHP:
<?php
$a = 'car'; // $a - это строка
$a[0] = 'b'; // $a все еще строка
echo $a; // bar
?>Более подробно смотрите в разделе Доступ к символу
в строке.
Приведение типов
Приведение типов в PHP работает так же, как и в C: имя требуемого
типа записывается в круглых скобках перед приводимой переменной.
<?php
$foo = 10; // $foo это целое число
$bar = (boolean) $foo; // $bar это булев тип
?>
Допускаются следующие приведения типов:
- (int), (integer) — приведение к integer
- (bool), (boolean) — приведение к boolean
- (float), (double), (real) — приведение к float
- (string) — приведение к string
- (array) — приведение к array
- (object) — приведение к object
- (unset) — приведение к NULL (PHP 5)
Приведение типа (binary) и поддержка префикса b были добавлены в PHP 5.2.1
Обратите внимание, что внутри скобок допускаются пробелы и
символы табуляции, поэтому следующие примеры равносильны по своему
действию:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Приведение строковых литералов и переменных к бинарным строкам:
<?php
$binary = (binary) $string;
$binary = b"binary string";
?>
Замечание:
Вместо использования приведения переменной к string, можно также заключить
ее в двойные кавычки.
<?php
$foo = 10; // $foo - это целое число
$str = "$foo"; // $str - это строка
$fst = (string) $foo; // $fst - это тоже строка// Это напечатает "они одинаковы"
if ($fst === $str) {
echo "они одинаковы";
}
?>
Может быть не совсем ясно, что именно происходит при приведении между типами.
Для дополнительной информации смотрите разделы:
Вернуться к: Типы
php.ru
строка в число и обратно
Информация во все времена представляла собой символы. Только когда появилось программирование, она частично стала буквами, цифрами и знаками (в формальном смысле).
До известного времени наибольшей популярностью пользовалась устная речь, собственноручно изготовленные символы, жесты, а также произведения искусства, в частности. Важно, что все эти варианты естественного представления информации от мала до велика всегда можно было описать словами, то есть сделать доступными программной обработке в том или ином смысле.
Строки и числа
Строки — это, прежде всего, совокупности различных символов. В разных средствах программирования дробная часть отделялась от целой по-разному. Одни предпочитали точку, другие запятую (в PHP преобразование строки в число подразумевает «.»). Триады разделялись одинарным апострофом, запятой или пробелом. Вещественные числа записывались через букву «Е».
Все это формальности. Математика и принципы работы любого процессора всегда признавали числа без излишеств, а для работы с вещественными значениями были разработаны соответствующие дополнительные процессоры.
Но мир переменных конкретного типа (для программ начала эры) и реализация современной идеи консенсуса всех типов данных означает: в PHP преобразовать строку в число все равно что ничего не сделать. В лучшем случае PHP «отрежет», а точнее, сделает 0 или число, если в исходной строке есть хотя бы одна цифра. Все цифры до первого нецифрового символа составят это число.
Общее правило преобразования
На PHP преобразование строки в число, если программист не указал иное, происходит автоматически в момент применения. Если переменная содержит только цифры и точку, то может быть получено вещественное число. Если в последовательности цифр встретится запятая, то все, что идет до нее, будет интерпретировано как число, естественно, целое.
Любой нецифровой символ в последовательности цифр останавливает процесс, и результат преобразования PHP «строка в число» будет только тем значением, которое сформировалось до первого нецифрового символа.
Математика и обработка символов
Что сложнее, первое или второе, даже с позиций формул, не помещающихся на странице, внушительных матриц, графов, распутать которые порой не могут даже авторы, производных от интегралов, дифференциалов от интегралов и многочленов в n-том поколении, сказать очень просто: общество, несомненно, чтит заслуги математики и математиков, но обработка символов важнее, сложнее и покрывает математику, как пуховое одеяло, обеспечивая пытливому уму, не могущему выйти за пределы магии чисел, благоприятную среду для творчества.
Обычно на PHP строка в число преобразуется автоматически, но никогда не будет лишним проверить это. Лучше всего всегда быть уверенным: PHP правильно понимает, что та или иная переменная — это число. Если есть хоть тень сомнения, следует явно указать тип переменной (int) или (float) перед значением и проверить, как PHP понимает тип переменной функциями is_integer() или is_float().
Тенденции современного программирования
Классическая интерпретация задачи на PHP «строка в число» лежит в пределах представлений современного программирования. Обратный процесс имеет значительно более разнообразные варианты. Функциями number_format(), printf(), sprintf() можно творить чудеса, причем не только на уровне одного числа, но и группы чисел.
Преобразование на PHP «строка в число» свидетельствует, скорее, о том, что и это можем, но математика и численные вычисления — это не наш конек.
Написать приличный и надежный функционал, реализующий ту или иную обработку чисел на PHP, не представляет проблем, и результат не будет чем-то хуже результата от более математических языков. PHP — это, прежде всего, язык сервера, язык для обработки информации, в том числе и математического характера.
fb.ru
Отправить ответ