(PHP 8)
Интерфейс Stringable обозначает класс, который реализует метод __toString(). В отличие от большинства интерфейсов, Stringable неявно присутствует в каждом классе, в котором определили магический метод __toString(), хотя интерфейс разрешается и требуется объявлять явно.
Основное значение интерфейса — разрешить функциям выполнять проверку типа на соответствие объединённым типам
string|Stringable
, чтобы принимать либо строковый примитив,
либо объект, который может преобразовать в строку.
Пример #1 Пример базовой реализации интерфейса Stringable
В примере применили продвижение параметров конструктора до свойств объекта .
<?php
class IPv4Address implements Stringable
{
public function __construct(
private string $oct1,
private string $oct2,
private string $oct3,
private string $oct4,
) {}
public function __toString(): string
{
return "$this->oct1.$this->oct2.$this->oct3.$this->oct4";
}
}
function showStuff(string|Stringable $value)
{
// При выводе значения с типом Stringable неявно вызывается магический метод __toString
print $value;
}
$ip = new IPv4Address('123', '234', '42', '9');
showStuff($ip);
?>
Вывод приведённого примера будет похож на:
123.234.42.9