← Назад к вопросам

Назовите простые (скалярные) типы данных в PHP.

1.0 Junior🔥 241 комментариев
#PHP Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Скалярные типы данных в PHP

Скалярные типы (или простые типы) - это типы данных, которые содержат одно значение. В PHP есть четыре основных скалярных типа. Расскажу про каждый в деталях.

1. Integer (Целое число)

Целые числа без дробной части. В PHP это 32-bit или 64-bit значение в зависимости от платформы.

// Объявление integer
$age = 25;
$quantity = 100;
$temperature = -15;

// Разные представления
$decimal = 1234;      // Десятичное
$hexadecimal = 0x1A;  // Шестнадцатеричное (26)
$octal = 0o12;        // Восьмеричное (10)
$binary = 0b1010;     // Двоичное (10)

// Проверка типа
var_dump(is_int($age));
var_dump(gettype($age)); // "integer"

// Максимальное значение
echo PHP_INT_MAX; // 9223372036854775807
echo PHP_INT_MIN; // -9223372036854775808

// Проверка переполнения
if (is_int(500000 * 500000)) {
    echo "Int";
} else {
    echo "Float"; // При переполнении станет float
}

Особенности:

  • Целые числа без десятичной точки
  • Автоматически конвертируется в float при переполнении
  • Можно использовать в операциях: +, -, *, /, %

2. Float (Плавающая точка)

Числа с дробной частью, также называемые double или real.

// Объявление float
$price = 19.99;
$pi = 3.14159;
$scientific = 1.2e3;    // 1200
$small = 1.5e-2;        // 0.015
$negative = -3.14;

// Проверка типа
var_dump(is_float($price));
var_dump(gettype($price)); // "double"

// Предельные значения
echo PHP_FLOAT_MAX;     // Максимальное значение
echo PHP_FLOAT_MIN;     // Минимальное положительное значение

// ВАЖНО: проблемы с точностью!
$a = 0.1;
$b = 0.2;
$c = 0.3;

var_dump($a + $b == $c); // false! Из-за погрешности в бинарном представлении

// Правильный способ сравнения
var_dump(abs($a + $b - $c) < PHP_FLOAT_EPSILON); // true

// Для финансовых операций - используй string или decimal
use Brick\Math\BigDecimal;
$amount = BigDecimal::of('0.1')->plus(BigDecimal::of('0.2'));

Особенности:

  • Могут быть очень большие или очень маленькие числа
  • НЕ точны для финансовых операций (используй BCMath или BigDecimal)
  • Сравнивай с epsilon для проверки равенства
  • Используется 64-bit представление (IEEE 754)

3. String (Строка)

Последовательность символов, заключенная в кавычки.

// Различные способы объявления
$simple = 'Hello'; // Single quotes - буквальные
$double = "Hello"; // Double quotes - интерпретируются переменные
$heredoc = <<<EOT
Multi-line
string with variables: $simple
EOT;
$nowdoc = <<<'EOT'
Multi-line
but no variable interpolation
EOT;

// Интерпретация переменных
$name = 'John';
echo "Hello, $name";           // "Hello, John"
echo "Hello, {$name}s";        // "Hello, Johns"
echo "Hello, {$name['key']}";  // Доступ к элементам массива

// Экранирование
$quote = "He said \"Hi\"";
$tab = "Column1\tColumn2";
$newline = "Line1\nLine2";
$backslash = "Path: C:\\Users\\John";

// Проверка типа
var_dump(is_string($simple));    // true
var_dump(gettype($simple));       // "string"

// Основные операции
$str = "Hello";
echo strlen($str);                 // 5 - длина
echo strtoupper($str);             // HELLO
echo strtolower($str);             // hello
echo substr($str, 1, 3);           // ell
echo strpos($str, 'l');            // 2 - позиция первого 'l'
echo str_replace('l', 'L', $str); // HeLLo

// Строки как массивы
$char = $str[0]; // 'H'
$char = $str[-1]; // 'o' - последний символ (PHP 7.1+)

Особенности:

  • Разные способы определения (single, double, heredoc, nowdoc)
  • Интерпретация переменных в double quotes и heredoc
  • Доступ к символам по индексу как к массиву
  • Обширная библиотека функций для работы (str*, substr, strlen и т.д.)

4. Boolean (Логическое значение)

Принимает только два значения: true (истина) или false (ложь).

// Прямое определение
$isActive = true;
$isEmpty = false;

// Результаты условных операций
$isGreater = 10 > 5;       // true
$isEqual = 5 == 5;         // true
$isNotEqual = 5 != 5;      // false
$isLess = 5 < 10;          // true

// Логические операции
$a = true;
$b = false;

var_dump($a && $b);     // false (AND)
var_dump($a || $b);     // true (OR)
var_dump(!$b);          // true (NOT)
var_dump($a and $b);    // false (AND с более низким приоритетом)
var_dump($a or $b);     // true (OR с более низким приоритетом)

// Проверка типа
var_dump(is_bool(true));     // true
var_dump(gettype(true));     // "boolean"

// Автоматическая конвертация
if (1) echo "true";          // Выведет
if (0) echo "false";         // Не выведет
if ("text") echo "true";     // Выведет
if ("") echo "empty";        // Не выведет
if (null) echo "null";       // Не выведет
if (array()) echo "array";   // Не выведет

// Явное преобразование
var_dump((bool)1);           // true
var_dump((bool)0);           // false
var_dump((bool)"");          // false
var_dump((bool)"0");         // false
var_dump((bool)"text");      // true
var_dump((bool)null);        // false

Особенности:

  • Только два значения: true и false
  • Case-insensitive: TRUE, True, true работают одинаково
  • Используется в условных операторах (if, while, for)
  • Автоматическая конвертация из других типов

Правила конвертации типов

// String to Int/Float
var_dump((int)"123abc");        // 123
var_dump((int)"abc123");        // 0
var_dump((float)"3.14abc");     // 3.14

// Number to String
var_dump((string)123);           // "123"
var_dump((string)3.14);          // "3.14"

// Any to Boolean
var_dump((bool)0);               // false
var_dump((bool)1);               // true
var_dump((bool)"");             // false
var_dump((bool)"0");            // false (внимание!)
var_dump((bool)"text");         // true
var_dump((bool)null);            // false
var_dump((bool)array());         // false
var_dump((bool)[1, 2]);          // true

Type Hints в PHP 7.0+

// Объявление типов параметров
function add(int $a, int $b): int {
    return $a + $b;
}

echo add(5, 3);        // 8
echo add("5", "3");    // 8 (с strict_types=0 конвертирует)

// Строгая типизация
declare(strict_types=1);

function divide(float $a, float $b): float {
    if ($b == 0) throw new Exception('Division by zero');
    return $a / $b;
}

divide(10, 2);         // 5.0
divide("10", "2");     // TypeError - строгая типизация

Инструменты для работы со скалярными типами

// Проверка типа
var_dump(is_int($var));
var_dump(is_float($var));
var_dump(is_string($var));
var_dump(is_bool($var));
var_dump(is_numeric($var));   // int или float или "123"
var_dump(is_scalar($var));    // int, float, string, bool

// Получение типа
echo gettype($var);

// Преобразование типов
$int = (int)"123";
$float = (float)"3.14";
$string = (string)123;
$bool = (bool)1;

// Intval, floatval, strval, boolval
$val = intval("123.45");       // 123
$val = floatval("123.45");     // 123.45
$val = strval(123);            // "123"
$val = boolval(1);             // true

Итог

Вот четыре скалярных типа PHP:

ТипПримерИспользование
Integer42, -5, 0xFFЦелые числа, ID, счетчики
Float3.14, 1.5e3Дроби, вычисления (осторожно!)
String"text", 'text'Текст, имена, URL, JSON
Booleantrue, falseУсловия, флаги, результаты

Все остальные типы в PHP - это составные (composite): массивы, объекты, ресурсы и т.д.

Назовите простые (скалярные) типы данных в PHP. | PrepBro