Синтаксис php (811590), страница 2
Текст из файла (страница 2)
Пример:<?php$foo = 10;// $foo это целое число$bar = (boolean) $foo;// $bar это булев тип?>Допускаются следующие приведения типов:(int), (integer) - приведение к целому числу(bool), (boolean) - приведение к булеву типу(float), (double), (real) - приведение к числу с плавающей точкой (float)(string) - приведение к строке(array) - приведение к массиву(object) - приведение к объектуОбратите внимание, что внутри скобок допускаются пробелы и символы табуляции,поэтому следующее равносильно по своему действию:<?php$foo = (int) $bar;$foo = ( int ) $bar;?>Совет: вместо приведения переменной к строке, вы можете заключить ее в двойныекавычки.<?php$foo = 10;// $foo это целое число$str = "$foo";// $str это строка$fst = (string) $foo; // $fst это также строка// Это напечатает "они одинаковы"if ($fst === $str) {echo "они одинаковы";}?>Преобразование в тип Boolean (двоичные данные)Для несомненного преобразования значения в булев тип используйте приведение типа(bool) или (boolean).
Однако в большинстве случаев вам нет необходимости использоватьприведение типа, поскольку значение будет автоматически преобразовано, если оператор,функция или управляющая конструкция требует булев аргумент.При преобразовании в логический тип, следующие значения рассматриваются какFALSE:Сам булев FALSEцелое 0 (ноль)число с плавающей точкой 0.0 (ноль)пустая строка и строка "0"массив с нулевыми элементамиобъект с нулевыми переменными-членамиспециальный тип NULL (включая неустановленные переменные)Все остальные значения рассматриваются как TRUE (включая любой ресурс).Внимание: -1 считается TRUE, как и любое ненулевое (отрицательное илиположительное) число!Примеры преобразований:<?phpvar_dump((bool)var_dump((bool)var_dump((bool)var_dump((bool)var_dump((bool)var_dump((bool)var_dump((bool)var_dump((bool)?>"");1);-2);"foo");2.3e5);array(12));array());"false");////////////////bool(false)bool(true)bool(true)bool(true)bool(true)bool(true)bool(false)bool(true)Смотрите также: settype() и gettype()Преобразование в тип Integer (целые числа)Для несомненного преобразования значения в целое используйте приведение типа (int)или (integer).
Однако в большинстве случаев вам нет необходимости использоватьприведение типа, поскольку значение будет автоматически преобразовано, если оператор,функция или управляющая конструкция требует целый аргумент. Вы также можетепреобразовать значение в целое при помощи функции intval().Преобразование из типа BooleanFALSE преобразуется в 0 (ноль), а TRUE - в 1 (единицу).Преобразование из типа FloatПри преобразовании из числа с плавающей точкой в целое, число будет округлено всторону нуля.Если число с плавающей точкой превышает пределы целого (как правило, это +/- 2.15e+9= 2^31), результат будет неопределенным, так как целое не имеет достаточной точности,чтобы вернуть верный результат.
В этом случае не будет выведено ни предупреждения, нидаже замечанияВнимание! Никогда не приводите неизвестную дробь к целому, так как это может иногдадать неожиданные результаты, например:<?phpecho (int) ( (0.1+0.7) * 10 ); // выводит 7!?>Смотрите более подробно о данной проблеме: предупреждение о точности чисел сплавающей точкой.Преобразование из типа StringСмотрите Преобразование строк в числаПреобразования из других типовДля других типов поведение преобразования в целое не определено. В настоящее времяповедение такое же, как если бы значение сперва было преобразовано в булев тип. Однаконе полагайтесь на это поведение, так как он может измениться без предупреждения.Преобразование в тип Float (числа с плавающей точкой)О том, когда и как строки преобразуются в числа с плавающей точкой смотрите здесь.Для значений других типов преобразование будет таким же, как если бы значение сначалабыло преобразовано в целое, а затем в число с плавающей точкой.
Дополнительнуюинформацию смотрите в разделе Преобразование в целое.Преобразование в тип String (строки)Вы можете преобразовать значение в строку, используя приведение (string), либофункцию strval(). В выражениях, где необходима строка, преобразование происходитавтоматически. Это происходит, когда вы используете функции echo() или print(), либокогда вы сравниваете значение переменной со строкой. Ознакомление с разделами "Типыданных" и "Манипуляции с типами" позволяет вам лучше понимать суть. Смотрите такжеsettype().Булево (boolean) значение TRUE преобразуется в строку "1", а значение FALSEпредставляется как "" (пустая строка). Этим способом вы можете преобразовыватьзначения в обе стороны - из булева типа в строковый и наоборот.Целое (integer) или число с плавающей точкой (float) преобразуется в строку,представленную числом, состоящим из его цифр (включая показатель степени для чисел сплавающей точкой).Массивы всегда преобразуются в строку "Array", так что вы не можете отобразитьсодержимое массива (array), используя echo() или print(), чтобы узнать, что он содержит.Чтобы просмотреть один элемент, вам нужно сделать что-то вроде echo $arr['foo'].Смотрите ниже советы о том, как отобразить/просмотреть все содержимое.Объекты всегда преобразуются в строку "Object".
Если вы хотите вывести значениепеременной-члена объекта (object) с целью отладки, прочтите следующие абзацы. Есливы хотите получить имя класса требуемого объекта, используйте get_class().Ресурсы всегда преобразуются в строки со структурой "Resource id #1", где 1 - этоуникальный номер ресурса (resource), присвоенный ему PHP во время выполнения. Есливы хотите получить тип ресурса, используйте get_resource_type().NULL всегда преобразуется в пустую строку.Вывод массивов, объектов или ресурсов не предоставляет вам никакой полезнойинформации о самих значениях. Более подходящий способ вывода значений для отладки использовать функции print_r() и var_dump().Вы также можете преобразовать значения PHP в строки для постоянного хранения.
Этотметод называется сериализацией и может быть выполнен при помощи функции serialize().Кроме того, если в вашей установке PHP есть поддержка WDDX, вы можетесериализовать значения PHP в структуры XML.Преобразование в тип Array (массивы)Для любого из типов: integer, float, string, boolean и resource, если вы преобразуетезначение в массив, вы получите массив с одним элементом (с индексом 0), являющимсяскалярным значением, с которого вы начали.Если вы преобразуете в массив объект (object), вы получите в качестве элементов массивасвойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов.Если вы преобразуете в массив значение NULL, вы получите пустой массив.Преобразование в тип Object (объекты)Если объект преобразуется в объект, он не изменяется.
Если же в объект преобразуетсязначение любого иного типа, создается новый экземпляр встроенного класса stdClass.Если значение было пустым, новый экземпляр также будет пустым. При любом другомзначении оно будет содержатся в переменной-члене scalar:<?php$obj = (object) 'ciao';echo $obj->scalar; // выведет 'ciao'?>Смотрите также: Классы и объектыПреобразование в тип Resource (ресурсы)Поскольку тип ресурс содержит специальные указатели на открытые файлы, соединения сбазой данных, область изображения и тому подобное, вы не можете преобразовать какоелибо значение в ресурс.Преобразование строк в числаЕсли строка распознается как числовое значение, результирующее значение и типопределяется так как показано далее.Строка будет распознана как float, если она содержит любой из символов '.', 'e', или 'E'.Иначе она будет определена как целое.Значение определяется по начальной части строки. Если строка начинается с верногочислового значения, будет использовано это значение.
Иначе значением будет 0 (ноль).Верное числовое значение - это одна или более цифр (могущих содержать десятичнуюточку), по желанию предваренных знаком, с последующим необязательным показателемстепени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами.<?php$foo =$foo =$foo =$foo =$foo =$foo =$foo =$foo =?>1 + "10.5";1 + "-1.3e3";1 + "bob-1.3e3";1 + "bob3";1 + "10 Small Pigs";4 + "10.2 Little Piggies";"10.0 pigs " + 1;"10.0 pigs " + 1.0;////////////////$foo$foo$foo$foo$foo$foo$foo$fooэтоэтоэтоэтоэтоэтоэтоэтоfloat (11.5)float (-1299)integer (1)integer (1)integer (11)float (14.2)float (11)float (11)Более подробную информацию об этом преобразовании смотрите в разделе о strtod(3)документации Unix.Если вы хотите протестировать любой из примеров этого раздела, вы можете скопироватьи вставить его и следующую строку, чтобы увидеть, что происходит:<?phpecho "\$foo==$foo; тип: " .
gettype ($foo) . "<br />\n";?>Не ожидайте получить код символа, преобразовав его в целое (как вы могли бы сделать,например, в Си). Для преобразования символов в их коды и обратно используйте функцииord() и chr().Общие понятия о переменных в PHPКак и в любом другом языке программирования, в PHP существует такое понятие, какпеременная.При программировании на PHP можно не скупиться на объявление новых переменных.Принципы экономии памяти, которые были актуальны несколько лет назад, сегодня врасчет не принимаются. Однако, при хранении в переменных больших объемов памяти,лучше удалять неиспользуемые переменные, используя оператор Unset.Вообще, переменная - это область оперативной памяти, доступ к которой осуществляетсяпо имени. Все данные, с которыми работает программа, хранятся в виде переменных(исключение — константа, которая, впрочем, может содержать только число или строку).Такого понятия, как указатель (как в Си), в PHP не существует — при присвоениипеременная копируется один-в-один, какую бы сложную структуру она ни имела.