Is long: примеры (PHP)
is_long(mixed $value): boolis_long() — это функция языка PHP, предназначенная для проверки, является ли тип переменной целым числом (integer). Эта функция является синонимом для функции is_int(), и они могут использоваться взаимозаменяемо.
Функция используется, когда требуется убедиться, что значение переменной представляет собой целое число, прежде чем выполнять с ним операции, специфичные для данного типа (например, арифметические вычисления или побитовые операции).
Функция принимает один обязательный аргумент:
is_long(mixed $value): bool
- $value (mixed) — Проверяемое значение. Может быть любого типа.
Функция возвращает true, если $value является целым числом типа integer, и false в противном случае.
Важно понимать, что функция проверяет тип переменной, а не её содержимое. Строка '123' или число с плавающей точкой 123.0 вернут false, так как их типы — string и float соответственно.
Примеры проверки различных типов данных.
$var1 = 42;
$var2 = -100;
$var3 = 0;
$var4 = 0x1A; // Шестнадцатеричное число (26 в десятичной)
$var5 = 0123; // Восьмеричное число (83 в десятичной)
var_dump(is_long($var1)); // true
var_dump(is_long($var2)); // true
var_dump(is_long($var3)); // true
var_dump(is_long($var4)); // true
var_dump(is_long($var5)); // true
bool(true) bool(true) bool(true) bool(true) bool(true)
$var6 = 42.5;
$var7 = '42';
$var8 = true;
$var9 = null;
$var10 = [1, 2];
var_dump(is_long($var6)); // false, тип float
var_dump(is_long($var7)); // false, тип string
var_dump(is_long($var8)); // false, тип bool
var_dump(is_long($var9)); // false, тип null
var_dump(is_long($var10)); // false, тип array
bool(false) bool(false) bool(false) bool(false) bool(false)
В PHP существует несколько функций для проверки типов данных, имеющих схожие цели.
- is_int() — Полный аналог
is_long(). Рекомендуется использоватьis_int(), так как это имя лучше отражает суть типа данных в современном PHP. - is_integer() — Ещё один синоним для
is_int()иis_long(). Все три функции идентичны. - ctype_digit() — Проверяет, все ли символы в строке являются цифрами. В отличие от
is_long(), работает со строками и возвращаетtrueдля строки'123'. Полезна для валидации пользовательского ввода. - filter_var() с фильтром
FILTER_VALIDATE_INT— Мощный инструмент для валидации и санитизации данных. Может проверять числа в заданном диапазоне и возвращать само значение в случае успеха.
Что предпочтительнее? Для строгой проверки типа переменной — используйте is_int(). Для проверки, можно ли строковое значение безопасно трактовать как целое число, — ctype_digit() (для неотрицательных) или filter_var($value, FILTER_VALIDATE_INT) (для любых).
Наиболее частая ошибка — путаница между проверкой типа и проверкой содержимого строки.
$id = $_GET['id']; // Допустим, значение '100'
if (is_long($id)) {
echo 'ID является целым числом.';
} else {
echo 'ID НЕ является целым числом. Тип: ' . gettype($id);
}
ID НЕ является целым числом. Тип: string
В этом случае данные извне (GET, POST) всегда имеют строковый тип. Для проверки следует использовать filter_var($id, FILTER_VALIDATE_INT) или ctype_digit() (для неотрицательных).
$number = '10';
if (is_long($number)) {
// Этот блок никогда не выполнится
if ($number > 5) { // Если бы выполнился, PHP преобразовал бы строку '10' к int для сравнения
echo 'Больше 5';
}
} else {
echo 'Проверка is_long не пройдена.';
}
Проверка is_long не пройдена.
Функция is_long() как синоним is_int() существует с ранних версий PHP и не претерпевала изменений в своём поведении.
Стоит отметить общий контекст развития типизации в PHP. Начиная с PHP 7, появились скалярные объявления типов (type declarations) для аргументов и возвращаемых значений функций. Это более современный и предпочтительный способ гарантировать целочисленный тип, чем ручная проверка с помощью is_long() внутри функции.
// Старый способ с проверкой
function oldWay($value) {
if (!is_int($value)) {
throw new InvalidArgumentException('Требуется integer');
}
return $value * 2;
}
// Современный способ (PHP 7+)
function newWay(int $value): int {
return $value * 2;
}
// PHP автоматически приведёт нестрогий тип, если возможно, или выбросит TypeError$largeNumber = PHP_INT_MAX; // Максимальное значение для int
$evenLarger = $largeNumber + 1; // Произойдёт переполнение, тип может измениться на float
var_dump(is_long($largeNumber));
var_dump($largeNumber);
var_dump(is_long($evenLarger));
var_dump($evenLarger);
var_dump(gettype($evenLarger));
bool(true) int(9223372036854775807) bool(false) float(9.2233720368548E+18) string(6) "double"
$dataSet = [1, '2', 3.0, 'four', 5];
$onlyInts = array_filter($dataSet, 'is_long'); // is_long используется как callback
print_r($onlyInts);
Array
(
[0] => 1
[4] => 5
)
Функция помогает отличить строгое равенство от нестрогого.
$intVar = 0;
$strVar = '0';
$boolVar = false;
// Нестрогое сравнение (с приведением типов)
var_dump($intVar == $strVar); // true
var_dump($intVar == $boolVar); // true
// Строгое сравнение (без приведения)
var_dump($intVar === $strVar); // false
var_dump($intVar === $boolVar); // false
// Проверка типа
var_dump(is_long($intVar)); // true
var_dump(is_long($strVar)); // false
var_dump(is_long($boolVar)); // false
bool(true) bool(true) bool(false) bool(false) bool(true) bool(false) bool(false)
function validateIntegerRange($value, $min = null, $max = null): bool {
// Сначала проверяем базовый тип
if (!is_long($value)) {
return false;
}
// Затем проверяем диапазон, если указан
if ($min !== null && $value < $min) {
return false;
}
if ($max !== null && $value > $max) {
return false;
}
return true;
}
var_dump(validateIntegerRange(50, 0, 100)); // true
var_dump(validateIntegerRange(150, 0, 100)); // false
var_dump(validateIntegerRange('50', 0, 100)); // false (строка)
bool(true) bool(false) bool(false)
Is long в Python
В Python используется функция isinstance() для проверки типа. Аналогом is_long() будет проверка на тип int.
value = 42
print(isinstance(value, int))
# Для строки
print(isinstance('42', int))
True False
Is long в Javascript
В JavaScript строгой статической типизации нет. Часто используют оператор typeof, но он возвращает 'number' и для целых, и для дробных чисел. Для точной проверки на целое число применяют другие методы.
let value = 42;
console.log(Number.isInteger(value)); // true
console.log(Number.isInteger(42.5)); // false
console.log(Number.isInteger('42')); // false
true false false
Is long в MySQL
В SQL запросах тип данных обычно известен из схемы таблицы. Для проверки в выражениях можно использовать функции, возвращающие тип аргумента, например, TYPE() (в MariaDB) или CAST() для преобразования и проверки на ошибки.
-- Пример косвенной проверки: попытка сложить с 0
SELECT (CASE WHEN '123' + 0 = '123' THEN 'Likely numeric' ELSE 'Not numeric' END) as check_result;
-- Для строки '12abc' результат будет 'Not numeric'
+---------------+ | check_result | +---------------+ | Likely numeric| +---------------+