Strval: примеры (PHP)

Преобразование значений в строку с помощью strval в PHP
Раздел: Преобразование типов/форматов
strval(mixed value): string

Описание функции strval()

Назначение

Функция strval() используется для получения строкового представления переменной. Она преобразует любое переданное значение в строку (string).

Когда применяется

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

Аргументы

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

  • $value - значение любого типа, которое необходимо преобразовать в строку.

Функция не имеет флагов или дополнительных параметров.

Базовые примеры

Преобразование основных типов

Преобразование целого числа:

$var = 123;
echo strval($var);
string(3) "123"

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

$var = 45.67;
echo strval($var);
string(5) "45.67"

Преобразование булевого значения:

$var = true;
echo strval($var);
string(1) "1"
$var = false;
echo strval($var);
string(0) ""

Работа с null:

$var = null;
echo strval($var);
string(0) ""

Обычная строка остается без изменений:

$var = "Hello";
echo strval($var);
string(5) "Hello"

Похожие функции в PHP

(string) приведение типа

Явное приведение типа к строке с помощью оператора (string) работает аналогично strval() и часто считается более идиоматичным способом.

$num = 100;
$str = (string) $num;
settype()

Функция settype() преобразует тип переменной, но изменяет исходную переменную, а не возвращает новое значение.

$var = 500;
settype($var, 'string');
sprintf() и str_format()

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

$float = 3.14159;
$str = sprintf("%.2f", $float); // "3.14"
Когда что использовать

strval() или (string) используют для простого и быстрого преобразования. settype() нужна для изменения типа существующей переменной. sprintf() применяют для сложного форматирования строкового представления значения.

Аналоги в других языках

Strval в Python

В Python используется функция str() для большинства типов и repr() для получения официального строкового представления объекта.

num = 42
result = str(num)  # "42"

Strval в Javascript

В JS преобразование выполняется с помощью String(), .toString() или неявного преобразования при сложении с пустой строкой.

let num = 42;
let str1 = String(num);     // "42"
let str2 = num.toString();  // "42"
let str3 = num + "";        // "42"

Strval в MySQL

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

SELECT CAST(12345 AS CHAR);
SELECT CONCAT(12345, '');
Основное отличие

Отличие PHP функции strval() от аналогов в других языках часто заключается в деталях преобразования конкретных типов (например, массивов или объектов), а также в наличии магического метода __toString() для объектов.

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

Преобразование массивов

Попытка преобразовать массив вызывает ошибку уровня E_NOTICE или E_WARNING и возвращает строку "Array".

$arr = [1, 2, 3];
echo strval($arr);
PHP Warning:  Array to string conversion
string(5) "Array"
Преобразование объектов без __toString()

Объекты, не имеющие магического метода __toString(), при преобразовании вызывают фатальную ошибку.

class MyClass {}
$obj = new MyClass();
echo strval($obj);
PHP Fatal error:  Uncaught Error: Object of class MyClass could not be converted to string
Потеря точности с большими числами

При преобразовании очень больших целых чисел может произойти потеря точности, если число превышает размер типа int на текущей платформе.

$big = PHP_INT_MAX + 1;
echo strval($big);
В 64-битной системе: string(19) "9.2233720368548E+18"

Изменения в версиях PHP

PHP 8.0.0

Преобразование объектов, не имеющих метода __toString(), теперь вызывает ошибку TypeError, а не E_RECOVERABLE_ERROR. Это делает обработку ошибок более последовательной в соответствии со строгой типизацией.

// PHP 7
// Вызывала E_RECOVERABLE_ERROR

// PHP 8
// Вызывает TypeError
Общее замечание

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

Расширенные примеры

Работа с объектами и __toString()

Класс с реализованным магическим методом корректно преобразуется:

Пример php
class User {
    public function __toString() {
        return 'User object';
    }
}
$user = new User();
echo strval($user);
string(11) "User object"
Использование в цепочках вызовов

Функцию можно применять непосредственно в цепочках операций:

Пример php
$length = strlen(strval(M_PI));
echo $length;
int(17)
Гарантия строкового типа для функций

Обеспечение корректного типа аргумента:

Пример php
function saveToLog(string $message) {
    // запись в лог
}
$data = ['user' => 'John'];
saveToLog(strval($data)); // Передается строка "Array"
Сравнение с неявным преобразованием

Явное преобразование делает код понятнее:

Пример php
$count = 5;
// Неявное преобразование
$implicit = "Count: " . $count;
// Явное преобразование
$explicit = "Count: " . strval($count);
// Оба варианта дают одинаковый результат
Работа с ресурсами

Ресурсы преобразуются в строку вида "Resource id #номер":

Пример php
$file = fopen('test.txt', 'r');
echo strval($file);
string(13) "Resource id #5"
Использование в пользовательской логике преобразования
Пример php
function prepareForDisplay($value) {
    if (is_array($value)) {
        return 'Array (' . count($value) . ' items)';
    }
    return strval($value);
}
echo prepareForDisplay(42.5);
string(4) "42.5"

PHP strval function comments

En
Strval Get string value of a variable