PHP 7引入了返回类型声明.这意味着我现在可以指示返回值是某个类,接口,数组,可调用或新的可阻塞标量类型之一,这对于函数参数是可能的.
function returnHello(): string {
return 'hello';
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,值并不总是存在,并且您可能返回某种类型的某些内容,或者返回null.虽然您可以通过将其默认值设置为null(DateTime $time = null)来使参数可为空,但似乎没有办法为返回类型执行此操作.确实如此,或者我不知道怎么做?这些不起作用:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
Run Code Online (Sandbox Code Playgroud) 我们有对象实现__toString():
class Foo {
public function __toString()
{
return 'bar';
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们有返回string或实现的对象的函数__toString(),就像上面的例子。
string对字符串使用返回类型当然有效:
function getString():string {
return 'Works!';
}
Run Code Online (Sandbox Code Playgroud)
返回类型的对象Foo不起作用,因为它不是string:
function getString(Foo $foo):string {
return $foo; // Fatal TypeError!
}
Run Code Online (Sandbox Code Playgroud)
是否有任何 PHP 接口可以用来键入提示string和实现该未知接口的对象,例如Printableor Stringable(lol)?
目标是能够返回string实现特定接口的 或 对象(这将强制实现__toString)。
function foo ($a): mixed
{
if ($a == 1)
return true;
else
return 'foo';
}
var_dump(foo(1));
Run Code Online (Sandbox Code Playgroud)
由于mixed不是真实类型,因此导致:
致命错误:未被捕获的TypeError:foo()的返回值必须是混合实例。
有没有一种方法可以键入提示的mixed返回值,或者您是否根本没有在这种情况下声明类型提示?