相关疑难解决方法(0)

PHP7中可为空的返回类型

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)

php nullable return-type type-hinting php-7

148
推荐指数
2
解决办法
7万
查看次数

PHP 7.1:是否有匹配“字符串”和“实现 __toString() 的对象”的本机接口?

我们有对象实现__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)。

php interface type-hinting php-7

8
推荐指数
2
解决办法
1465
查看次数

如果返回值混合使用什么类型的提示?

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返回值,或者您是否根本没有在这种情况下声明类型提示?

php return type-hinting php-7

2
推荐指数
1
解决办法
1852
查看次数

标签 统计

php ×3

php-7 ×3

type-hinting ×3

interface ×1

nullable ×1

return ×1

return-type ×1