0Pricing
PHP Academy · Урок

Автоматическое преобразование и приведение типов

Разберитесь, как 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 falsy

intval() с основаниями систем счисления

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 — локальная установка не требуется.

Все уроки этого курса

  1. Объявление переменных в PHP
  2. Обзор типов данных PHP
  3. Вывод с помощью echo и print
  4. Автоматическое преобразование и приведение типов
← Назад к PHP Academy