is_scalar()
PHP is_scalar() проверяет, является ли переменная целым числом, числом с плавающей точкой, строкой или булевым значением.
Введение
is_scalar() — это встроенная функция PHP, которая определяет, содержит ли переменная скалярное значение. Скаляр — это единственное, атомарное значение, которое не состоит из других значений. В PHP есть ровно четыре скалярных типа:
- integer — целые числа, например
42 - float (double) — числа с десятичной точкой, например
3.14 - string — текст, например
"hello" - boolean —
trueилиfalse
Всё остальное является нескалярным: массивы и объекты составные (они объединяют множество значений), тогда как значения NULL и resource — это особые типы, для которых is_scalar() намеренно возвращает false. Знание этого различия важно, поскольку скалярные значения можно безопасно выводить, конкатенировать или сохранять напрямую, тогда как составные значения обычно требуют перебора или предварительного анализа.
Синтаксис
is_scalar(mixed $value): boolФункция принимает один аргумент — $value — и возвращает true, если это целое число, число с плавающей точкой, строка или булево значение, и false для всех остальных типов, включая массивы, объекты, NULL и ресурсы.
Примеры использования
Следующий пример проверяет по одной переменной каждого распространённого типа:
Строка, число с плавающей точкой и булево значение — все они скалярные, поэтому возвращают 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() — правильный инструмент.