🧱 Суть

PHP – язык с динамической типизацией: тип переменной определяется во время выполнения программы.

Одна и та же переменная может хранить значения разных типов:

$value = 10;
$value = "hello";

PHP автоматически преобразует типы в некоторых ситуациях (type juggling).

📦 Проблема

1. Неявное преобразование может давать неожиданные результаты

$result = "10" + 5;
 
echo $result; // 15

PHP автоматически преобразовал строку в число.

2. Сравнение разных типов может вести себя неожиданно

var_dump(0 == "hello");

Без понимания правил приведения типов результат может быть неожиданным.

3. Ошибки из-за неправильного типа данных

Например, функция ожидает число:

function sum(int $a, int $b) {}

Но получает строку:

sum("10", "20");

✅ Решение

Понимать основные типы данных PHP и контролировать преобразование типов.

💻 Основные типы данных

Скалярные типы

Integer – целые числа:

$age = 25;

Float – числа с плавающей точкой:

$price = 99.99;

String – строки:

$name = "Evgeniy";

Boolean – логические значения:

$isActive = true;

Составные типы

Array – массив:

$users = ["Alex", "Bob"];

Object – объект:

$user = new User();

Специальные типы

Null – отсутствие значения:

$value = null;

Resource – внешний ресурс:

$file = fopen("test.txt", "r");

Проверка типов

Получить тип:

var_dump($value);

Пример:

$value = "123";
 
var_dump($value);

Результат:

string(3) "123"

Проверить конкретный тип:

is_string($value);
is_int($value);
is_array($value);
is_null($value);

Неявное приведение типов

PHP сам меняет тип в некоторых операциях:

$num = "10";
 
$result = $num + 5;
 
echo $result;

Результат:

15

Строка "10" автоматически стала числом.

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

Можно вручную изменить тип:

$value = "123";
 
$number = (int) $value;

Теперь:

var_dump($number);

Результат:

int(123)

Основные преобразования:

(int)    // integer
(float)  // float
(string) // string
(bool)   // boolean
(array)  // array
(object) // object

Строгое сравнение

Для сравнения значения и типа используется:

===

Пример:

10 == "10";  // true
10 === "10"; // false

== сравнивает только значение.
=== сравнивает значение и тип.

🎯 Вывод

  • PHP использует динамическую типизацию
  • переменные могут менять тип во время выполнения
  • PHP умеет автоматически приводить типы
  • явное приведение (int), (string) помогает контролировать данные
  • для безопасного сравнения лучше использовать ===
  • понимание типов помогает избегать скрытых ошибок

🔗 Связано