W3docs

is_scalar()

PHP is_scalar() проверяет, является ли переменная целым числом, числом с плавающей точкой, строкой или булевым значением.

Введение

is_scalar() — это встроенная функция PHP, которая определяет, содержит ли переменная скалярное значение. Скаляр — это единственное, атомарное значение, которое не состоит из других значений. В PHP есть ровно четыре скалярных типа:

  • integer — целые числа, например 42
  • float (double) — числа с десятичной точкой, например 3.14
  • string — текст, например "hello"
  • booleantrue или false

Всё остальное является нескалярным: массивы и объекты составные (они объединяют множество значений), тогда как значения NULL и resource — это особые типы, для которых is_scalar() намеренно возвращает false. Знание этого различия важно, поскольку скалярные значения можно безопасно выводить, конкатенировать или сохранять напрямую, тогда как составные значения обычно требуют перебора или предварительного анализа.

Синтаксис

is_scalar(mixed $value): bool

Функция принимает один аргумент — $value — и возвращает true, если это целое число, число с плавающей точкой, строка или булево значение, и false для всех остальных типов, включая массивы, объекты, NULL и ресурсы.

Примеры использования

Следующий пример проверяет по одной переменной каждого распространённого типа:

php— editable, runs on the server

Строка, число с плавающей точкой и булево значение — все они скалярные, поэтому возвращают true. Массив является составным типом, поэтому возвращает false.

Совет: var_dump() нагляднее, чем echo, для булевых результатов. При использовании echo значение true выводится как 1, а false — как пустая строка, что легко неправильно интерпретировать. Подробнее см. var_dump().

NULL, объекты и ресурсы не являются скалярными

Эти три случая чаще всего вызывают затруднения, поскольку интуитивно они кажутся «простыми», но is_scalar() возвращает false для всех из них:

<?php
var_dump(is_scalar(null));            // bool(false) — NULL is its own type
var_dump(is_scalar(new stdClass()));  // bool(false) — objects are compound

$handle = fopen("php://memory", "r");
var_dump(is_scalar($handle));         // bool(false) — a file resource
fclose($handle);
?>

Если вы также хотите считать NULL допустимым значением, проверяйте его отдельно: is_scalar($v) || is_null($v).

Использование is_scalar() в качестве защитного условия

Распространённый способ применения — проверить, можно ли безопасно вывести или конкатенировать значение. Составные значения, такие как массивы, нельзя напрямую преобразовать в строку (echo $array вызывает предупреждение), поэтому предварительная проверка предотвращает ошибки:

<?php
function describe(mixed $value): string
{
    if (is_scalar($value)) {
        return "scalar value: $value";
    }
    return "non-scalar value of type " . gettype($value);
}

echo describe(42),      "\n"; // scalar value: 42
echo describe([1, 2]),  "\n"; // non-scalar value of type array
echo describe(null),    "\n"; // non-scalar value of type NULL
?>

Здесь gettype() сообщает точный тип нескалярных значений, а is_scalar() защищает выводимые значения от проблем.

is_scalar() vs. проверки конкретных типов

is_scalar() — это удобный способ спросить «является ли это одним из четырёх скалярных типов?». Когда вас интересует конкретный тип, используйте специализированную функцию:

ФункцияВозвращает true для
is_int()только целых чисел
is_float()только чисел с плавающей точкой
is_string()только строк
is_bool()только булевых значений
is_scalar()целое число или float или string или boolean

is_scalar() эквивалентна записи is_int($v) || is_float($v) || is_string($v) || is_bool($v), но короче и нагляднее.

Заключение

is_scalar() возвращает true только для четырёх скалярных типов — integer, float, string и boolean — и false для массивов, объектов, NULL и ресурсов. Наиболее полезна как защитное условие перед выводом или конкатенацией значения с неизвестным типом. Когда нужно проверить конкретный тип, используйте is_int(), is_string() и аналогичные функции; когда достаточно ответа на вопрос «является ли это простым единственным значением?», is_scalar() — правильный инструмент.

Практика

Практика
Какие из следующих значений считаются скалярным типом данных в PHP согласно статье?
Какие из следующих значений считаются скалярным типом данных в PHP согласно статье?
Was this page helpful?