Is long: примеры (PHP)

Работа с функцией is_long для проверки integer в PHP
Раздел: Работа с переменными
is_long(mixed $value): bool
Описание функции is_long

is_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

В 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) (для любых).

Типичные ошибки

Наиболее частая ошибка — путаница между проверкой типа и проверкой содержимого строки.

Ожидание true для строки с числом
$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 не пройдена.
Изменения в последних версиях PHP

Функция 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
Расширенные примеры использования
Работа с большими числами и переполнением
Пример php
$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"
Проверка элементов массива
Пример php
$dataSet = [1, '2', 3.0, 'four', 5];
$onlyInts = array_filter($dataSet, 'is_long'); // is_long используется как callback
print_r($onlyInts);
Array
(
    [0] => 1
    [4] => 5
)
Сравнение с автоматическим приведением типов

Функция помогает отличить строгое равенство от нестрогого.

Пример php
$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)
Использование в пользовательских функциях валидации
Пример php
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|
+---------------+

PHP is_long function comments

En
Is long Alias of is_int