Сегодня мы рассмотрим: Настоящие ценители музыки знают, что для качественного...
PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется согласно контексту, в котором она используется. То есть, если вы присвоите строковое значение переменной $var , $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом.
Примером автоматического преобразования типа является оператор сложения "+ ". Если любой из операндов является числом с плавающей точкой, то все операнды интерпретируются как числа с плавающей точкой, результатом будет также число с плавающей точкой. В противном случае операнды будут интерпретироваться как целые числа и результат также будет целочисленным. Обратите внимание, что это НЕ меняет типы самих операндов; меняется только то, как они вычисляются. Некоторые практические примеры:
$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)
?>
Если вы хотите протестировать любой из примеров, приведенных в данном разделе, вы можете использовать функцию var_dump() .
Внимание: -1 считается TRUE , как и любое ненулевое (отрицательное или положительное) число!
Примеры преобразований:
var_dump
((bool)
""
);
// bool(false)
var_dump
((bool)
1
);
// bool(true)
var_dump
((bool) -
2
);
// bool(true)
var_dump
((bool)
"foo"
);
// bool(true)
var_dump
((bool)
2.3e5
);
// bool(true)
var_dump
((bool) array(12
));
// bool(true)
var_dump
((bool) array());
// bool(false)
var_dump
((bool)
"false"
);
// bool(true)
?>
Преобразование из типа Boolean
FALSE преобразуется в 0 (ноль), а TRUE - в 1 (единицу).
Преобразование из типа Float
При преобразовании из числа с плавающей точкой в целое, число будет округлено в сторону нуля .
Если число с плавающей точкой превышает пределы целого (как правило, это +/- 2.15e+9 = 2^31), результат будет неопределенным, так как целое не имеет достаточной точности, чтобы вернуть верный результат. В этом случае не будет выведено ни предупреждения, ни даже замечания
Внимание! Никогда не приводите неизвестную дробь к целому, так как это может иногда дать неожиданные результаты, например:
echo (int) ((0.1
+
0.7
) *
10
);
// выводит 7!
?>
Преобразование из типа String
Преобразования из других типов
Для других типов поведение преобразования в целое не определено. В настоящее время поведение такое же, как если бы значение сперва было . Однако не полагайтесь на это поведение, так как он может измениться без предупреждения.
Булево (boolean ) значение TRUE преобразуется в строку "1" , а значение FALSE представляется как "" (пустая строка). Этим способом вы можете преобразовывать значения в обе стороны - из булева типа в строковый и наоборот.
Целое (integer ) или число с плавающей точкой (float ) преобразуется в строку, представленную числом, состоящим из его цифр (включая показатель степени для чисел с плавающей точкой).
Массивы всегда преобразуются в строку "Array" , так что вы не можете отобразить содержимое массива (array ), используя echo() или print() , чтобы узнать, что он содержит. Чтобы просмотреть один элемент, вам нужно сделать что-то вроде echo $arr["foo"] . Смотрите ниже советы о том, как отобразить/просмотреть все содержимое.
Объекты всегда преобразуются в строку "Object" . Если вы хотите вывести значение переменной-члена объекта (object ) с целью отладки, прочтите следующие абзацы. Если вы хотите получить имя класса требуемого объекта, используйте get_class() .
Ресурсы всегда преобразуются в строки со структурой "Resource id #1" , где 1 - это уникальный номер ресурса (resource ), присвоенный ему PHP во время выполнения. Если вы хотите получить тип ресурса, используйте .
NULL всегда преобразуется в пустую строку.
Вывод массивов, объектов или ресурсов не предоставляет вам никакой полезной информации о самих значениях. Более подходящий способ вывода значений для отладки - использовать функции print_r() и var_dump() .
Вы также можете преобразовать значения PHP в строки для постоянного хранения. Этот метод называется сериализацией и может быть выполнен при помощи функции serialize() . Кроме того, если в вашей установке PHP есть поддержка WDDX, вы можете сериализовать значения PHP в структуры XML.
Преобразование в тип Array (массивы)
Для любого из типов: integer , float , string , boolean и resource , если вы преобразуете значение в массив, вы получите массив с одним элементом (с индексом 0), являющимся скалярным значением, с которого вы начали.
Если вы преобразуете в массив объект (object ), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов.
Если вы преобразуете в массив значение NULL , вы получите пустой массив.
Преобразование в тип Object (объекты)
Если объект преобразуется в объект, он не изменяется. Если же в объект преобразуется значение любого иного типа, создается новый экземпляр встроенного класса stdClass . Если значение было пустым, новый экземпляр также будет пустым. При любом другом значении оно будет содержатся в переменной-члене scalar:
$obj
= (object)
"ciao"
;
echo
$obj
->
scalar
;
// выведет "ciao"
?>
У меня есть приложение, которое касается клиентов со всего мира, и, естественно, я хочу, чтобы все, что попадало в мои базы данных, было кодировано в кодировке UTF-8.
Основная проблема для меня в том, что я не знаю, какая кодировка источника какой-либо строки будет - она может быть из текстового поля (использование