可字符串化接口

(PHP 8)

介绍

The Stringable 接口表示一个类具有 __toString() 方法。与大多数接口不同,Stringable 隐式存在于任何具有魔法 __toString() 方法定义的类中,尽管它可以也应该被明确声明。

它的主要价值是允许函数针对联合类型 string|Stringable 进行类型检查,以接受字符串基元或可以强制转换为字符串的对象。

接口概要

interface Stringable {
/* 方法 */
public __toString(): string
}

可字符串化示例

示例 #1 基本可字符串化用法

<?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) {
// 对于可字符串化对象,这将隐式调用 __toString()。
print $value;
}

$ip = new IPv4Address('123', '234', '42', '9');

showStuff($ip);
?>

上面的示例将输出类似以下内容

123.234.42.9

目录

添加笔记

用户贡献笔记 1 笔记

39
Gormack
2 年前
由于它在 PHP 8 中引入,示例 #1 中的 IPv4Address 类可以缩短为
<?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";
}
}
?>
To Top