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 "они одинаковы";
}
?>

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

Приведение типов в PHP == табурет о двух ножках? / Хабр

— В PHP приведение типов работает нормально, надо только включать здравый смысл.
— А чего там, просто сравниваешь и все…
— Ого, глюк какой-то в PHP, смотри, сравниваю два флоата, они должны быть одинаковые, а он мне говорит, что они не равны.
— А, ну когда число со строкой сравниваешь, перебирать надо, что сработает.

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

Буду краток, дальше будут только примерчики. А к тебе, дорогой читатель, просьба. Некоторые ответы спрятаны под спойлер. Перед тем, как заглянуть в ответ под спойлером, попробуй ответить сам. За каждый правильный ответ заслуженно прибавляй себе по баллу. В конце поста в опросе не забудь проставить свой результат. Договорились?

Тогда поехали.

Начнем с чисел

Что может быть проще сравнения чисел, числа мы умеем сравнивать с детского сада.

Для порядка проверяем очевидное:

11 == 11 // true, воистину
12 == 11 // false, само собой
12 == 0xC // true, сравниваем с 16-ричным

Как насчет такого сравнения?
12 == "0xC"

Попробуйте ответить

true. Да, тут значение в строке преобразовалось в целое с учетом системы счисления, здорово, правда?


А если так попробуем?
12 == 014

Чур не подглядываем, помните?

true. А как иначе? 014 — это же 12 в 8-ричной системе счисления.


Теперь так:
12 == "014"

Результат…

false. Те, кто хотел и тут true, умерьте свои требования, «0xC» преобразовалось в 12 и хватит.


И еще так:
14 == "014"

Равно…

true, вполне ожидаемо с учетом предыдущего примера.


Тут вроде все наглядно:
014 == "014"

Правильный ответ…

false, хотя чисто визуально это трудно заметить сходу, особенно, если читаешь чужой код.


Внимание:
0 == "0,9"

Ответ…

true, чего? А, ну да, так false: 0 == «0.9». Запятая посчиталась строковым символом и она и все после нее отбросилось.


Сравним такие значения:
"1e2" == "100"

Получим…

true, так как 1 умножить на 10 в квадрате равно 100.

0b11 == 3 // true, 0b - это относится к двоичной системе

А если 0b11 в строке?
"0b11" == 3

Сравниваем…

false, для 16-ричной системы это работает, а для двоичной — извините.


Теперь попробуем так:
2.333 == "2.333petrovich" // true, тут Петрович в конце строки и поэтому исключается из сравнения. 2.333 == "ivanovich3.333" // false, а тут Иванович вначале, поэтому сравнение идет со строкой. 0 == "ivanovich3.333" // true, строка равна нулю.

А тут попробуйте сами:

"2.33a" == "2.33b"

И получаем…

false, тут никакого преобразования нет, сравниваются строки.

233 == "233w1" // true, по аналогии с Петровичем

Почти тоже самое:
233 == "233e1"

Ответ…

false, да, кто заметил, тут 233 * 10.

"233" == "233w1" // false
233 == "233*1" // true

А если так скалькулировать?
233 == "233*2"

Вот…

Правильно, снова true, по аналогии с Петровичем.

0 == "" // true

Не подглядывайте, сперва сами:
"0" == ""

Пытаемся включить здравый смысл…

false, смиритесь.

"1.000000000000000123" == "1.000000000000000456" // false, логично, разные ж числа.

Тоже два float в строках:
"2.000000000000000123" == "2.000000000000000456"

Догадались?

true, не удивляйтесь, с виду числа хоть и разные, но 2 == 2, тут все до 2 округлилось.


Булевы сравнения

Раз с числами все проще простого и все ответили правильно, то вот еще простые примерчики.

Сперва такой каламбур… вспомнился анекдот про Поручика, но пожалуй воздержусь.

"true" == true // true
"false" == true // true, строка равна true
"false" == false // false, строка равна true
"true" == false // false, строка равна true

Тут все просто и понятно.
true == "0" // false, тут уже идет сравнение не со строкой, а с нулем
true == "00" // true, а тут со строкой...
true == 00 // false
true == "00" + 0 // false, тут к строке с нулем 0 прибавили

А если так прибавить:
true == "01" + 0

То получим…

true, а тут уже к 1 прибавление.

true == "0x" + 0 // false

Пробел пред нулем:
true == " 0"

Сверяемся…

true, хотя кто-то мог ожидать, что пробел отбросится и будет сравнение с нулем.

true == 0x0 // false
true == "0x0" // true, так-то, тут уже не 0, а строка
true == "0.0" // true, и тут строка
true == " " // true
true == [] // false, пустой массив - это false
true == [0] // а массив с нулем - true

А если так?
true == [[]]

Проверяем…

true, тут массив что-то себе содержит, пустой массив.


NULL

Позвольте еще несколько сравнений, теперь с null.
null == false // true,
null == 0 // true,
false == "0" // true,

Попробуйте догадаться по аналогии:
null == "0"

Получаем…

false, видимо, надо просто запомнить.

null == [] // true, так как массив пустой
null == [0] // false, не пустой массив все-таки
Массивы

Ну и для особо любознательных — сравнения массивов.

Тут надеюсь, сами догадаетесь, только не подглядывайте:

[] == 0

Сверяем…

Точно, false, хотя null == 0 и [] == null.

[0] == 0 // false,

В документации сказано, что «$a == $b — TRUE в случае, если $a и $b содержат одни и те же пары ключ/значение».
Проверим, как именно работает это утверждение. тем более, что в доке ничего ни сказано про то, как сравниваются ключи.
[1 => 1] == [1 => 1] // true
[1 => 1] == ["1" => 1] // true, при этом:
[1 => 1] == ["0x1" => 1] // false, при том, что если отдельно сравнить ключи таким образом:
array_keys([1 => 1]) == array_keys(["0x1" => 1]) // true
Зато:
[1 => 1] == [1 => "0x1"] // true

Загадочка

И на десерт загадочка (загадка не от меня, коллега однажды ее мне дал).
Может ли когда-либо выполниться условие $x == 1 && $x == 2, если может, то когда, если нет, то почему?
А как-же резюме?

А какое тут резюме, табурет с двумя ножками вполне может быть использован по назначению. Более того, он имеет свои положительные стороны, например, помогает держать в тонусе вестибулярный аппарат и ягодицы. Так что читаем доки, набиваем шишки и все будет хорошо.

Трюки с типами в PHP

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присваиваете строковое значение переменной var, var становится строкой. Если вы затем присваиваете переменной var целочисленное значение, она становится целым числом.

Примером автоматической конвертации в PHP является операция сложения ‘+’. Если любой из операндов float, то все операнды вычисляются как float, и результат также будет float. Если же операнды интерпретируются как целые числа, то и результат будет целочисленным.
Обратите внимание, что при этом НЕ изменяются типы самих операндов; это делается только на этапе вычисления операндов.

$foo = "0"; // $foo это строка (ASCII 48)
$foo += 2; // теперь $foo это integer (2)
$foo = $foo + 1.3; // теперь $foo это float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo это integer (15)
$foo = 5 + "10 Small Pigs"; // $foo это integer (15)

Если последние два примера непонятны, см. Конвертация строк.

Если вы хотите форсировать вычисление переменной как имеющей определённый тип, см. раздел Приведение типов. Если вы хотите изменить тип переменной, см. settype().

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

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

$a = 1; // $a это integer
$a[0] = "f"; // $a становится массивом, а $a[0] содержит "f"

Предыдущий пример кажется похожим на следующий, делая $a массивом, первый элемент которого содержит ‘f’. Теперь рассмотрим:

$a = "1"; // $a это string
$a[0] = "f"; // Что будет со смещением строки? Что произойдёт?

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

Исходя из этого, как указано в PHP 3.0.12 и PHP 4.0b3-RC4, результат этой автоматической конвертации рассматривается как неопределённый/undefined. Пути разрешения, однако, обсуждаются.

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

$foo = 10; // $foo это integer
$bar = (float) $foo; // $bar это float

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

  • (int), (integer) — приведение к integer
  • (bool), (boolean) — приведение к boolean
  • (float), (double), (real) — приведение к float
  • (string) — приведение к string
  • (array) — приведение к array
  • (object) — приведение к object

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

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

$foo = (int) $bar;
$foo = ( int ) $bar;

Возможно, сейчас не очевидно, что происходит при приведении конкретных типов.

При приведении или форсировании конвертации из массива в строку, результатом станет слово Array. При приведении или форсировании конвертации из объекта в строку, результатом станет слово Object.

При приведении скалярной или строковой переменной к массиву, переменная станет первым элементом этого массива:

$var = 'ciao';
$arr = (array) $var;
echo $arr[0]; // выведет 'ciao'

При приведении скалярной или строковой переменной к объекту, переменная станет атрибутом этого объекта; имя атрибута будет ‘scalar’:

$var = 'ciao';
$obj = (object) $var;
echo $obj->scalar; // выведет 'ciao'

Смотрите также:
Описание на ru2.php.net
Описание на php.ru

Манипуляции с типами | Руководство по 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

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

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», результат же этого автоматического преобразования следует, однако, рассматривать как неопределенный. В PHP 4 для доступа к символам строки был введен новый синтаксис фигурных скобок, используйте этот синтаксис вместо вышеприведенного:

$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 "они одинаковы";
 }

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

Смотрите также:
Описание на ru2.php.net
Описание на php.ru

phpm.ru | Манипуляции с типами

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

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 "они одинаковы";
}
?>

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

Типы данных в PHP

loader

Всем привет! Сегодня поговорим о типах данных в PHP. Говоря о типах, мы подразумеваем типы каких-либо значений.

В сравнении с другими языками программирования, (например, C/C++/Java), в PHP одной и той же переменной можно присваивать значения разных типов. Поэтому в PHP типы следует относить не к переменной, а к значению. И говорить, например, что в переменной $var находится значение типа integer. Это называется «динамическая типизация» – одна и та же переменная может хранить значения разных типов. Согласитесь, это очень круто.

Давайте рассмотрим следующий код:

<?php
$var = 123;
$var = 'string';
$var = 3.14;

Здесь переменная $var на каждой строке меняет своё значение, при этом у этих значений разные типы. В первом случае – целое число (integer), во втором – строка (string), в третьем – дробное число (float).

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

<?php
$var = 123;
echo "Значение переменной: $var";

Этот код выведет на экран строку:

Значение переменной: 123

И другой пример:

<?php
$var = 123;
echo 'Значение переменной: $var';

Выведет следующее:

Значение переменной: $var

Как мы видим, внутри одинарных кавычек не был выполнен поиск переменных и интерпретатор вернул нам текст ровно так, как он был определён.
Чтобы вывести значение переменной и при этом использовать одинарные кавычки, можно склеить строки. Этот приём называется конкатенацией строк (от англ. concatenation – сцепление, связывание). Для этого используется оператор «.» (точка) между двумя значениями, который отделён от них пробелами. Пример:

<?php
$var = 123;
echo 'Значение переменной: ' . $var;

Выведет строку:

Значение переменной: 123

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

Давайте теперь рассмотрим код, похожий на тот, что мы только что написали:

<?php
$var = 123;
$string = 'Значение переменной: ' . $var;

В переменной $string сейчас хранится значение типа «строка». Несмотря на то, что до этого в $var было целое число. Это произошло в результате использования оператора «точка» для конкатенации строк. В результате его использования всегда получится строка. И, как Вы уже, наверное, догадались, тип, который получится в результате какого-либо выражения, будет зависеть от оператора. То есть, при использовании плюса (оператора сложения), всегда будет получаться число.

Пример:

<?php
$x = 1;
echo $x + '2';

Выведет результат:

3

PHP достаточно умён, чтобы автоматически преобразовать строку ‘2’ к числу и выполнить сложение. Таким образом, в зависимости от оператора, операнды будут сначала приведены к нужному типу, а затем над ними будет выполнена операция. Это называется «приведение типов«.
Приведение типа можно сделать и самостоятельно. Делается это с помощью следующей конструкции:

(тип_к_которому_нужно_привести) значение

Например:

<?php
$string = '123';
$numeric = (int) $string;

В переменной $string сейчас строка, а в переменной $numeric – уже целое число. Пока что не будем на этом детально останавливаться, но знать, что это возможно, лишним не будет.

Давайте теперь пробежимся по типам, которые мы уже рассмотрели. Это числа (целые и дробные), строки. Помимо этих есть ещё несколько типов данных. Все мы их рассматривать сейчас не будем, но рассмотрим ещё один простейший тип – boolean (булево значение). У этого типа могут быть только два значения: true и false – «истина» и «ложь» (надеюсь, информатика у всех в школе была?). Этот тип используется для проверки различных условий и в следующем уроке мы рассмотрим его применение более детально. Это всё, что касается типов.

loader loader

php — Приведение типов в PHPDocumentor

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
,

PHP: Манипуляции с типами — Руководство

Типы манипуляции

PHP n’inpose pas (et ne permet pas) definir explicitement le type of un variable lors де са декларация; le type d’une variable est déterminé par son context Использование d’. Например, si une valeur de type string est assignée à la переменная $ var , alors $ var devient de type строка. Si une valeur de type integer est enuite присвоить переменную cette $ var , alors son type devient целое число.

Пример автоматического преобразования типа с использованием PHP является оператором умножения ‘*’. Si une des opérandes est de type float, alors les deux opérandes seront évaluées com de type float, et le résultat sera de type плавать. Sinon, les opérandes seront interprétées com целых чисел и результатов поиска целых чисел. Notez que cela ne modifie pas le type des opérandes en elle-mêmes; La seule модификация есть фасад не проверенные операции и тип de l’expression elle-même.

$ foo = "1"; // $ foo est une chaîne de caractères (ASCII 49)
$ foo * = 2; // $ foo est maintenant un entier (2)
$ foo = $ foo * 1.3; // $ foo est maintenant un nombre à virgule flottante (2.6)
$ foo = 5 * "10 поросят"; // $ foo est un entier (50)
$ foo = 5 * "10 маленьких свиней"; // $ foo est un entier (50)
?>

Si les 2 derniers examples vous semblent bizarres, reportez-vous à la section sur les преобразования de chaînes en nombres.

Залить переменную forcer une variable à étre évaluée en un определенного типа, reportez-vous à la section sur le transtypage. Устройство смены заливки le type d’une variable, reportez-vous à la fonction SetType ().

Залейте тестер les образцы де cette section, utilisez la fonction var_dump ().

Примечание :

Le comportement d’une convert automatique en tableau est actuellement без défini.

De plus, puisque PHP support l’indexation des chaînes de caractères с помощью дезинфекции в используемом синтаксисе памяти для таблиц, Пример, подходящий для всех версий PHP:

$ a = 'автомобиль'; // $ a est une chaîne de caractères
$ a [0] = 'b'; // $ a est toujours une chaîne de caractères
echo $ a; // бар
?>

Reportez-vous à la section sur l’accès aux chaînes par caractères pour plus d’informations.

Типовая модификация

Модификация типов в PHP fonctionne global de la même façon qu’en C: le nom Тип désiré est écrit entre скобки avant la variable à traiter.

$ foo = 10; // $ foo est un entier
$ bar = (boolean) $ foo; // $ bar est un booléen
?>

Les prefixes autorisés sont:

  • (int), (integer): модификация en integer
  • (bool), (boolean): модификация en boolean
  • (float), (double), (real): модификация en float
  • (строка): модификация en строка
  • (массив): модификация en массив
  • (объект): модификация en объект
  • (не установлено): модификация en NULL

La Modification en binaire avec (binary) et le prefixe b ont été ajoutés en PHP 5.2.1. Обратите внимание на то, что приведенное (двоичное) значение является основным элементом памяти. (строка), mais il ne doit pas être invoqué.

Le cast (unset) unset (Неустановлено) полностью деконсультировано после PHP 7.2.0. Notez que le cast (не установлено) является идентичным à l’assignation de la valeur NULL à la переменная ou à l’appel. Приведенная (не установленная) сыворотка для части PHP 8.0.0.

Обратите внимание на таблицы и поля без авторизации в файлах скобки. Эквивалентные примеры suivants sont donc fonctionnellement:

$ foo = (int) $ bar;
$ foo = (int) $ bar;
?>

Модификация d’une chaîne littérale et d’une variable en chaînes binaires:

$ binary = (двоичный) $ string;
$ binary = b "двоичная строка";
?>

Примечание :

Вместо модификатора переменная переменная в цепочке, возможно ли это изменение d’entourer la variable de guillemets doubles.

$ foo = 10; // $ foo est un entier
$ str = "$ foo"; // $ str est une chaîne
$ fst = (строка) $ foo; // $ fst est également une chaîne

// Ceci affichera "не идентифицирует"

if ($ fst === $ str) {
echo "не идентифицирует";
}
?>

Le comportement d’une модификации типа n’est pas toujours évident suivant les types. Pour plus d’informations, reportez-vous à ces разделы:

,

symfony — Приведение типов функций класса в PHP

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
,

casting — Приведение типов к функции для преобразования типа переменной в PHP

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
,