Is scalar: примеры (PHP)
is_scalar(mixed $value): boolФункция is_scalar проверяет, является ли переменная скалярным значением. Скалярные типы в PHP включают целые числа (int), числа с плавающей точкой (float), строки (string) и логические значения (bool). Функция возвращает true, если переменная относится к одному из этих типов.
Использование функции актуально в ситуациях, когда необходимо убедиться, что переменная содержит простое значение, а не составной тип данных, такой как массив, объект или ресурс. Это часто требуется при валидации пользовательского ввода, сериализации данных или обработке параметров функций.
Синтаксис функции прост: is_scalar(mixed $value): bool. Единственный параметр $value — проверяемая переменная. Функция возвращает логическое значение (true или false).
Функция реагирует на основные скалярные типы и составные данные.
<?php
// Проверка целого числа
$var1 = 42;
var_dump(is_scalar($var1)); // bool(true)
// Проверка строки
$var2 = "Пример";
var_dump(is_scalar($var2)); // bool(true)
// Проверка числа с плавающей точкой
$var3 = 3.14159;
var_dump(is_scalar($var3)); // bool(true)
// Проверка логического значения
$var4 = true;
var_dump(is_scalar($var4)); // bool(true)
// Проверка массива
$var5 = [1, 2, 3];
var_dump(is_scalar($var5)); // bool(false)
// Проверка объекта
$var6 = new stdClass();
var_dump(is_scalar($var6)); // bool(false)
// Проверка null
$var7 = null;
var_dump(is_scalar($var7)); // bool(false)
// Проверка ресурса
$var8 = fopen('php://temp', 'r');
var_dump(is_scalar($var8)); // bool(false)
fclose($var8);
?>Результаты: bool(true) bool(true) bool(true) bool(true) bool(false) bool(false) bool(false) bool(false)
PHP предлагает семейство функций is_* для точной проверки типов.
- is_int() — проверяет, является ли переменная целым числом.
- is_float() или is_double() — проверяет число с плавающей точкой.
- is_string() — проверяет строковый тип.
- is_bool() — проверяет логическое значение.
- is_numeric() — проверяет, является ли значение числом или строкой, содержащей число. Эта функция отличается от
is_scalar, так как принимает строки типа "123". - is_countable() — проверяет, можно ли подсчитать количество элементов (массивы, объекты, реализующие Countable).
Функцию is_scalar предпочтительно использовать, когда необходимо обобщённо убедиться, что значение не является массивом, объектом или ресурсом. Для точной проверки конкретного типа лучше применять специализированные функции (is_int, is_string).
Основная ошибка — предположение, что is_scalar вернёт true для значения null.
<?php
$value = null;
if (is_scalar($value)) {
echo "Это скалярное значение";
} else {
echo "NULL не является скаляром"; // Это выполнится
}
?>NULL не является скаляром
Ещё одна типичная ситуация — попытка использовать функцию для проверки элементов массива без итерации.
<?php
$array = [1, 'text', [3, 4]];
var_dump(is_scalar($array)); // false, так как $array — массив
// Для проверки элементов нужен цикл
foreach ($array as $element) {
var_dump(is_scalar($element));
}
?>bool(false) bool(true) bool(true) bool(false)
Функция is_scalar была стабильной на протяжении многих релизов. Начиная с PHP 4.0.0, она всегда возвращала false для null. В PHP 8.0.0 не было внесено изменений в её поведение, но общая система типов стала строже. Например, внутренние функции теперь чаще выдают TypeError при несоответствии типов, что делает предварительную проверку с помощью is_scalar ещё более полезной.
<?php
function processValue($input) {
if (!is_scalar($input)) {
throw new InvalidArgumentException('Ожидается скалярное значение.');
}
return "Обработано: " . htmlspecialchars((string) $input);
}
try {
echo processValue(123) . "\n";
echo processValue([1,2]);
} catch (InvalidArgumentException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>Обработано: 123 Ошибка: Ожидается скалярное значение.
<?php
$mixedData = [
42,
"строка",
["вложенный массив"],
true,
null,
new DateTime(),
3.14
];
$scalarOnly = array_filter($mixedData, 'is_scalar');
print_r($scalarOnly);
?>Array
(
[0] => 42
[1] => строка
[3] => 1
[5] => 3.14
)<?php
// Эмуляция данных конфигурации
$config = [
'site_name' => 'Мой сайт',
'debug' => false,
'max_users' => 1000,
'plugins' => ['seo', 'cache'], // не скаляр
'version' => 2.5
];
foreach ($config as $key => $value) {
echo $key . ": " . (is_scalar($value) ? $value : '[НЕСКАЛЯРНОЕ ЗНАЧЕНИЕ]') . "\n";
}
?>site_name: Мой сайт debug: max_users: 1000 plugins: [НЕСКАЛЯРНОЕ ЗНАЧЕНИЕ] version: 2.5
<?php
$dataSet = ['id' => 1, 'name' => 'Иван', 'meta' => ['age' => 30]];
$preparedData = [];
foreach ($dataSet as $key => $value) {
if (is_scalar($value)) {
$preparedData[$key] = $value;
} else {
$preparedData[$key] = json_encode($value);
}
}
print_r($preparedData);
?>Array
(
[id] => 1
[name] => Иван
[meta] => {"age":30}
)Is scalar в Python
В Python нет прямой аналогии, но проверку на базовые типы можно реализовать с помощью isinstance().
def is_scalar_py(value):
scalar_types = (int, float, str, bool, bytes)
return isinstance(value, scalar_types)
print(is_scalar_py(42)) # True
print(is_scalar_py([1, 2])) # False
print(is_scalar_py(None)) # FalseTrue False False
Is scalar в Javascript
В JavaScript строгая проверка типов отличается. Простые типы — это string, number, boolean, bigint, symbol, undefined.
function isScalarJs(value) {
return (typeof value !== 'object' && typeof value !== 'function') || value === null;
}
console.log(isScalarJs(42)); // true
console.log(isScalarJs('text')); // true
console.log(isScalarJs([1,2])); // false
console.log(isScalarJs(null)); // true (особенность JS)true true false true
Is scalar в MySQL
В SQL нет прямой функции, но типы данных столбцов определяются при создании таблицы. Проверка происходит на уровне запросов с помощью операторов типа CAST или REGEXP для валидации формата.