Автоматическое преобразование и приведение типов
Разберитесь, как PHP автоматически преобразует типы и как выполнять приведение вручную.
«Автоматическое преобразование и приведение типов» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Что такое автоматическое преобразование типов?
Автоматическое преобразование типов означает, что PHP автоматически изменяет тип значения, когда оператору или функции требуется другой тип.
Это удобно, но может привести к трудно обнаруживаемым ошибкам, если вы не понимаете правила.
Неявное приведение типов в арифметике
PHP преобразует строки в числа при использовании в арифметическом контексте:
<?php
echo '5' + 3; // 8 — string '5' becomes int 5
echo '5.5' + 1.5; // 7 — string '5.5' becomes float
echo '5 cats' + 1; // 6 — leading numeric part used, rest ignored
echo 'cats' + 1; // 1 — non-numeric string becomes 0Нестрогое сравнение ==
Оператор == сравнивает значения после неявного приведения типов — это может приводить к неожиданным результатам:
<?php
var_dump(0 == 'a'); // true in PHP 7 (both become 0)
// false in PHP 8 (improved rules!)
var_dump('' == false); // true
var_dump('1' == true); // true
var_dump(null == false); // trueСтрогое сравнение ===
Всегда используйте ===, чтобы сравнивать и значение, и тип — неявного приведения типов не происходит:
<?php
var_dump(1 === '1'); // false — different types
var_dump(1 === 1); // true
var_dump(null === false); // false
var_dump(0 === false); // false
// Rule of thumb: prefer === unless you explicitly need type coercionЯвное приведение типов
Преобразуйте значение к определённому типу, добавив перед ним (type):
<?php
$str = '42.7';
$int = (int) $str; // 42
$float = (float) $str; // 42.7
$bool = (bool) $str; // true
$arr = (array) $str; // ['42.7']
echo $int; // 42
echo $float; // 42.7Функция settype()
settype() изменяет тип переменной непосредственно и возвращает true или false:
<?php
$value = '123';
settype($value, 'integer');
var_dump($value); // int(123)
// Alternative: intval(), floatval(), strval() functions
$n = intval('0xFF', 16); // 255 — parse hex stringОсобые случаи преобразования строк в числа
Основные правила преобразования строк в числа в PHP:
- Начальные пробелы игнорируются:
' 42 '→ 42 - Нечисловой префикс:
'php8'→ 0 (уведомление в PHP 8) - Экспоненциальная запись:
'1e3'→ 1000.0 - Шестнадцатеричные строки:
'0x1A'автоматически NOT преобразуются в int в PHP 7+
Правила приведения к логическому типу
Эти значения преобразуются в false; все остальные — в true:
<?php
$falsy = [false, 0, 0.0, '', '0', [], null];
foreach ($falsy as $v) {
var_dump((bool) $v); // all bool(false)
}
// Careful:
var_dump((bool) '0'); // false — the STRING '0' is falsy!
var_dump((bool) '00'); // true — only exactly '0' is falsyintval() с основаниями систем счисления
intval() принимает необязательный параметр основания системы счисления для разбора числовых строк:
<?php
echo intval('0b1010', 2); // 10 — binary
echo intval('077', 8); // 63 — octal
echo intval('1F', 16); // 31 — hexadecimal
echo intval('42'); // 42 — decimal (default base 10)Улучшенное приведение типов в PHP 8
В PHP 8 исправлено несколько несогласованных случаев неявного приведения типов из предыдущих версий:
0 == 'foo'теперь равноfalse(в PHP 7 было равноtrue)- При сравнении чисел с нечисловыми строками строка больше не преобразуется в 0
- Это делает PHP 8 безопаснее, но может нарушить устаревший код, зависящий от прежнего поведения
Как избежать ошибок из-за приведения типов
Рекомендации, которые помогут избежать неожиданностей при неявном приведении типов:
<?php
declare(strict_types=1); // enforce types at function boundaries
// Always use === for comparisons
if ($status === 'active') { /* safe */ }
// Cast explicitly before arithmetic
$total = (float) $_POST['price'] * (int) $_POST['qty'];
// Validate with filter_var
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT);
if ($age === false) { /* invalid input */ }Быстрая проверка
Во что вычисляется (int) '42abc' в PHP?
Повторение: неявное приведение типов
Что вы узнали об обработке типов в PHP:
- PHP автоматически приводит типы в операциях — это и есть неявное приведение типов
==сравнивает значения после приведения типов;===выполняет строгое сравнение (типа и значения)- Выполняйте явное приведение с помощью
(int),(float),(string),(bool) - Используйте
intval(),floatval(),strval()как функциональные альтернативы - В PHP 8 улучшена обработка некоторых особых случаев приведения типов
- Включите
strict_types=1, чтобы уменьшить количество неожиданностей в коде
Часто задаваемые вопросы
Урок «Автоматическое преобразование и приведение типов» бесплатный?
Да — полный текст урока «Автоматическое преобразование и приведение типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Автоматическое преобразование и приведение типов»?
Разберитесь, как PHP автоматически преобразует типы и как выполнять приведение вручную. Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Автоматическое преобразование и приведение типов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объявление переменных в PHP
- Обзор типов данных PHP
- Вывод с помощью echo и print
- Автоматическое преобразование и приведение типов