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

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

Функция is_string() в PHP является встроенной функцией для проверки типа переменной. Её основная задача — определить, является ли переданное значение строкой (string).

Эта функция часто используется для валидации входных данных, проверки значений, возвращаемых из баз данных или API, а также для обеспечения корректной работы функций, требующих строковые аргументы.

Синтаксис:

bool is_string ( mixed $var )

Функция принимает один обязательный параметр:

  • $var — проверяемая переменная. Может быть любого типа.

Возвращаемое значение: true, если переменная является строкой, и false в противном случае.

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

Ниже представлены простые примеры проверки различных типов данных.

Проверка строки
$var = 'Пример текста';
var_dump(is_string($var));
bool(true)
Проверка целого числа
$var = 123;
var_dump(is_string($var));
bool(false)
Проверка числа в виде строки
$var = '456';
var_dump(is_string($var));
bool(true)
Проверка булева значения
$var = true;
var_dump(is_string($var));
bool(false)
Проверка массива
$var = ['a', 'b'];
var_dump(is_string($var));
bool(false)
Проверка NULL
$var = null;
var_dump(is_string($var));
bool(false)
Похожие функции в PHP
  • gettype($var) === 'string' — возвращает тип переменной в виде строки. Менее эффективна, чем is_string, но может быть полезна, если нужен именно тип в строковом представлении.
    $var = 'test';
    var_dump(gettype($var) === 'string');
    bool(true)
  • is_scalar($var) — проверяет, является ли переменная скалярным значением (integer, float, string, boolean). Возвращает true для строк, но также и для других скалярных типов.
    $var = 'text';
    var_dump(is_scalar($var));
    $var = 5;
    var_dump(is_scalar($var));
    bool(true)
    bool(true)
  • ctype_* — семейство функций для проверки символов в строке (например, ctype_digit — все ли символы цифры). Эти функции проверяют содержимое строки, а не её тип, и возвращают false для пустых строк и нестроковых значений.
    $var = '123';
    var_dump(ctype_digit($var));
    $var = 123;
    var_dump(ctype_digit($var));
    bool(true)
    bool(false)

Функцию is_string предпочтительнее использовать, когда необходимо точно убедиться, что переменная имеет строковый тип, а не содержимое определённого вида.

Типичные ошибки
Проверка чисел в строковом формате

Функция вернёт true для чисел, записанных как строка, что иногда неожиданно для разработчиков.

$var = '123.45';
var_dump(is_string($var));
// Это строка, а не число.
$isNumber = is_numeric($var); // true, но тип - string
bool(true)
Путаница с другими функциями проверки

Иногда путают is_string с empty() или isset().

$var = '';
var_dump(is_string($var)); // true - это строка
var_dump(empty($var)); // true - строка пустая
bool(true)
bool(true)
Проверка результата функций, возвращающих mixed

Некоторые функции могут возвращать строку или false в случае ошибки.

$data = json_decode('invalid json', true);
var_dump(is_string($data)); // false, так как json_decode вернул NULL
$str = simplexml_load_string('<root></root>');
var_dump(is_string($str)); // false, это объект SimpleXMLElement
bool(false)
bool(false)
Изменения в последних версиях PHP

В PHP 8 существенных изменений в работе функции is_string не произошло. Однако, в PHP 8.0 была усилена система типов, что делает проверки типов более важными. Также, начиная с PHP 7.0, скалярные типы можно объявлять в сигнатурах функций, что часто делает явную проверку is string внутри функции менее необходимой.

В PHP 8.1 появился тип never, но он не связан напрямую с is_string.

Расширенные примеры
Проверка всех элементов массива
Пример php
$array = [1, 'text', '123', []];
$result = array_map('is_string', $array);
print_r($result);
Array
(
    [0] => 
    [1] => 1
    [2] => 1
    [3] => 
)
Фильтрация массива по строковым элементам
Пример php
$mixedArray = [10, 'apple', null, 'banana', 3.14, ''];
$stringArray = array_filter($mixedArray, 'is_string');
print_r($stringArray);
Array
(
    [1] => apple
    [3] => banana
    [5] => 
)
Работа с объектами, имеющими __toString
Пример php
class MyClass {
    public function __toString() {
        return 'Object as string';
    }
}
$obj = new MyClass();
var_dump(is_string($obj)); // Объект не является строкой
echo $obj; // Автоматически вызовется __toString
bool(false)
Object as string
Проверка после типажа (type juggling)
Пример php
$var = 0;
var_dump(is_string($var)); // false
$var = $var . ''; // Конкатенация превращает в строку
var_dump(is_string($var)); // true
var_dump($var);
bool(false)
bool(true)
string(1) "0"
Использование в условных конструкциях
Пример php
function processInput($input) {
    if (is_string($input)) {
        return 'Длина строки: ' . strlen($input);
    } else {
        return 'Входные данные не являются строкой';
    }
}
echo processInput('Привет');
echo '\n';
echo processInput(42);
Длина строки: 12
Входные данные не являются строкой
Сравнение с другими типами при строгом сравнении
Пример php
$var = '0';
var_dump($var == 0);   // true (нестрогое сравнение)
var_dump($var === 0);  // false (строгое сравнение)
var_dump(is_string($var) && $var === '0'); // true
bool(true)
bool(false)
bool(true)
Аналоги в других языках

Is string в Python

Используется функция isinstance() или сравнение типа.

var = 'Пример'
print(isinstance(var, str))
print(type(var) is str)
True
True

Is string в Javascript

Используется оператор typeof.

let var = 'Пример';
console.log(typeof var === 'string');
// или с учётом устаревших объектов String
console.log(typeof var === 'string' || var instanceof String);
true

Is string в MySQL

Прямого аналога нет. Для проверки типа данных в столбце можно использовать функции CAST() или операторы сравнения, но обычно проверка типа происходит на уровне приложения.

-- Косвенная проверка через конкатенацию
SELECT '123' REGEXP '^[0-9]+$'; -- Проверяет, состоит ли строка только из цифр
1 (true)

Is string в Java

String var = "Пример";
System.out.println(var instanceof String);
true

PHP is_string function comments

En
Is string Find whether the type of a variable is string