создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

Манипуляции с типамиПред.Глава 11. ТипыСлед.

Манипуляции с типами

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)

?>

Если последние два примера вам непонятны, смотрите Преобразование строк в числа.

Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите settype().

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

Замечание: Поведение автоматического преобразования в массив в настоящий момент не определено.

<?

$a = "1"; //$a это строка

$a[0] = "f"; //А как же смещение строки? Что произойдет?

?>

Поскольку PHP (по историческим причинам) поддерживает индексирование в строках с использованием такого же синтаксиса, как и при индексировании массива, вышеприведенный пример приводит к проблеме: следует ли $a стать массивом, первым элементом которого будет "f" или "f" должна стать первым символом строки $a?

Текущая версия PHP воспринимает второе присваивание как определение смещения строки, поэтому $a станет "f", результат же этого автоматического преобразования следует, однако, рассматривать как неопределенный. В PHP4 для доступа к символам строки был введен новый синтаксис фигурных скобок, используйте этот синтаксис вместо вышеприведенного:

<?

$a = "abc"; //$a это строка

$a{1} = "f"; //$a теперь содержит "afc"

?>

Для дополнительной информации смотрите раздел Доступ к символу в строке.

Приведение типов

Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной.

<?

$foo = 10; //$foo это целое число

$bar = (boolean) $foo; //$bar это булев тип

?>

Допускаются следующие приведения типов:

  • (int), (integer) - приведение к целому числу
  • (bool), (boolean) - приведение к булеву типу
  • (float), (double), (real) - приведение к числу с плавающей точкой (float)
  • (string) - приведение к строке
  • (array) - приведение к массиву
  • (object) - приведение к объекту

    Обратите внимание, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующее равносильно по своему действию:

    <?

    $foo = (int) $bar;

    $foo = (int) $bar;

    ?>

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

    <?

    $foo = 10; //$foo это целое число

    $str = "$foo"; //$str это строка

    $fst = (string) $foo; //$fst это также строка

    //Это напечатает "они одинаковы"

    if ($fst === $str){

    echo "они одинаковы";

    }

    ?>

    Возможно, вам не совсем ясно, что происходит при приведении между типами. Для дополнительной информации смотрите разделы:

  • Преобразование в булев тип
  • Преобразование в целое число
  • Преобразование в число с плавающей точкой
  • Преобразование в строку
  • Преобразование в массив
  • Преобразование в объект
  • Преобразование в ресурс
  • Таблицы сравнения типов

    Пред.

    Начало

    След.

    Псевдо-типы, используемые в этой документации

    Уровень выше

    Переменные

  • Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

    Ваше письмо×
    Free Web Hosting