W3docs

strval()

Функция strval() в PHP преобразует значение любого типа данных в строку. Узнайте о правилах преобразования и особых случаях.

Введение

strval() — это встроенная PHP-функция, которая возвращает строковое представление скалярного значения. Это явный и читаемый способ сказать «дай мне это значение в виде строки» — то же самое преобразование, которое PHP выполняет неявно при выводе значения через echo или конкатенации с ., но записанное так, чтобы ваше намерение было очевидным.

На этой странице рассказывается, что возвращает strval() для каждого типа данных, как функция обрабатывает null, булевы значения, числа с плавающей точкой, массивы и объекты, а также когда стоит использовать её вместо приведения типов или родственных функций, таких как intval(), floatval() и boolval().

Синтаксис

strval(mixed $value): string

strval() принимает один аргумент — $value — и возвращает string, представляющую его. Функция работает с любым скаляром (int, float, bool, string), с null, а также с объектами, реализующими __toString(). Передача массива возвращает буквальную строку "Array" и вызывает предупреждение (см. раздел Особые случаи).

Простой пример

Преобразование целого числа, числа с плавающей точкой и булевого значения в строки:

php— editable, runs on the server

$var1 — целое число, $var2 — число с плавающей точкой, а $var3 — булевое значение. Каждое из них преобразуется в строковую форму. Обратите внимание: true становится "1" — это часто удивляет новичков и является самой важной особенностью, которую стоит запомнить.

Как каждый тип преобразуется

strval() следует стандартным правилам PHP по работе с типами. В таблице ниже приведены результаты для каждого скалярного типа и для null.

Входное значениеРезультат strval()Примечания
10 (int)"10"Цифры в том же виде
3.14 (float)"3.14"Использует параметр ini precision
true (bool)"1"
false (bool)""Пустая строка, не "0"
null""Пустая строка
"hello" (string)"hello"Возвращается без изменений

Правила false → "" и null → "" стоит запомнить — именно они чаще всего являются причиной ошибок с пустым выводом:

<?php
var_dump(strval(false));  // string(0) ""
var_dump(strval(null));   // string(0) ""
var_dump(strval(true));   // string(1) "1"
?>

strval() vs. приведение типов vs. конкатенация

Все три способа дают одинаковый результат для скаляров, поэтому выбор определяется удобочитаемостью:

<?php
$n = 42;

$a = strval($n);   // "42" — explicit, named, greppable
$b = (string) $n;  // "42" — language cast
$c = "$n";         // "42" — string interpolation
$d = $n . "";      // "42" — concatenation trick (avoid)
?>

Предпочитайте strval() или приведение (string), когда хотите быть явными. strval() особенно удобна в одной ситуации, где приведение типов не работает: она является вызываемой (callable), поэтому её можно передавать в функции высшего порядка, такие как array_map():

<?php
$numbers = [1, 2, 3, 4];

// Turn every element into a string in one line.
$strings = array_map('strval', $numbers);

print_r($strings);
// Array
// (
//     [0] => 1
//     [1] => 2
//     [2] => 3
//     [3] => 4
// )

var_dump($strings[0]); // string(1) "1"
?>

Нельзя написать array_map('(string)', $numbers) — приведение типов не является callable, — поэтому strval — это чистый способ применить преобразование к каждому элементу коллекции.

Числа с плавающей точкой: следите за точностью

Числа с плавающей точкой форматируются с использованием директивы ini precision (по умолчанию 14 значимых цифр), а очень большие или очень маленькие числа переводятся в научную нотацию. Это означает, что strval() не является правильным инструментом для отображения денежных сумм или вывода с фиксированным числом десятичных знаков — для этого используйте number_format() или sprintf().

<?php
echo strval(0.1 + 0.2) . "\n";   // 0.3   (precision rounds the float error)
echo strval(1.0) . "\n";         // 1     (trailing ".0" is dropped)
echo strval(1.0e21) . "\n";      // 1.0E+21  (scientific notation)

// For a fixed two-decimal price, use sprintf instead:
echo sprintf('%.2f', 1.0) . "\n"; // 1.00
?>

Особые случаи: массивы и объекты

strval() предназначена для скаляров. Два нескалярных случая ведут себя особым образом:

Массивы преобразуются в буквальную строку "Array" и вызывают предупреждение — почти никогда это не то, что вам нужно. Чтобы превратить массив в текст, используйте implode() или json_encode():

<?php
$data = [1, 2, 3];

echo strval($data);            // Warning: Array to string conversion -> "Array"
echo implode(', ', $data);     // 1, 2, 3
echo json_encode($data);       // [1,2,3]
?>

Объекты преобразуются путём вызова их метода __toString(). Если класс не определяет этот метод, PHP выбрасывает ошибку Error:

<?php
class Money
{
    public function __construct(private float $amount) {}

    public function __toString(): string
    {
        return sprintf('$%.2f', $this->amount);
    }
}

echo strval(new Money(5)); // $5.00
?>

Когда использовать strval()

  • Применение преобразования к коллекции с помощью array_map('strval', $items) — основной сценарий использования.
  • Принудительная строковая семантика перед строгим сравнением (===) или при передаче в API или функцию с указанием типа string.
  • Самодокументирующийся код, где именованный strval() читается понятнее, чем явное приведение (string).

Для обратных преобразований смотрите функции-аналоги intval(), floatval() и boolval(). Чтобы проверить тип значения перед преобразованием, используйте gettype() или измените его на месте с помощью settype().

Заключение

strval() возвращает строковое представление скалярного значения, следуя правилам неявного преобразования PHP, но явно выражая ваше намерение. Запомните три особенности: true становится "1", и false, и null становятся пустой строкой "", а массивы превращаются в "Array" с предупреждением. Используйте её, когда вам нужна строковая callable (особенно с array_map), и обращайтесь к number_format() или sprintf(), когда требуется контролируемое форматирование чисел.

Практика

Практика
Что делает функция strval() в PHP?
Что делает функция strval() в PHP?
Was this page helpful?