<?php
function sayHello(string $name): never
{
echo "Hello, $name";
exit(); // 如果我们注释掉这一行,php 会抛出致命错误
}
sayHello("John"); // 结果:"Hello, John"
never 是一种仅返回值类型,指示函数不会终止。这意味着它要么调用 exit(),要么抛出异常,要么是无限循环。因此,它不能是 联合类型 声明的一部分。自 PHP 8.1.0 起可用。
never 在类型论中被称为底类型。这意味着它是所有其他类型的子类型,可以在继承期间替换任何其他返回值类型。
<?php
function sayHello(string $name): never
{
echo "Hello, $name";
exit(); // 如果我们注释掉这一行,php 会抛出致命错误
}
sayHello("John"); // 结果:"Hello, John"
覆盖本机接口的返回值类型
<?php
class ReadonlyArrayAccess implements ArrayAccess
{
public function __construct(private readonly $array) {}
public function offsetExists(mixed $offset): bool
{
return isset($this->array[$offset]);
}
public function offsetGet(mixed $offset): mixed
{
return $this->array[$offset];
}
public function offsetSet(mixed $offset, mixed $value): never
{
throw new LogicException('This array is read only');
}
public function offsetUnset(mixed $offset): never
{
throw new LogicException('This array is read only');
}
}