9

最近我正在检查 PHP 7,特别是返回类型声明类型提示。我已经从源代码(Github的 master 分支)编译 PHP 7 并在 Ubuntu 14.04 虚拟机中运行它。我尝试运行以下代码来测试新的Exceptions。但它给出了一个空白页。

<?php

function test(): string {

    return [];
}

echo test();

然后我意识到我必须设置要在屏幕上显示的错误。所以我在下面添加了老式的ini_set('display_errors', 1);

<?php
ini_set('display_errors', 1);

function test(): string {

    return [];
}

echo test();

TypeError根据this Throwable interface RFC ,这给了我预期的关注

致命错误:未捕获的类型错误:test() 的返回值必须是字符串类型,在 /usr/share/nginx/html/test.php 中的第 7 行中返回的数组 /usr/share/nginx/html/test.php :7 堆栈跟踪:#0 /usr/share/nginx/html/test.php(10): test() #1 {main} 在第 7 行的 /usr/share/nginx/html/test.php 中抛出

进一步挖掘我declare(strict_types=1);在顶部添加如下,

<?php declare(strict_types=1);

ini_set('display_errors', 1);

function test(): string {

    return [];
}

echo test();

砰,错误就消失了,给我留下了空白页。我不知道为什么它给了我一个空白页?

4

2 回答 2

20

在搜索了谷歌和 RFC 之后,我来到了 RFC 中的以下句子

该 RFC 进一步提议添加一个新的可选每个文件指令 declare(strict_types=1);,它使文件中的所有函数调用和返回语句对标量类型声明进行“严格”类型检查,包括扩展和内置 PHP 函数。

这意味着指令没有任何问题,declare(strict_types=1)但问题在于我调用ini_set()函数的方式。它期望第二个参数是string类型。

string ini_set ( string $varname , string $newvalue )

我正在通过int,因此无法设置显示错误本身所需的设置,因此我被 PHP 严格模式击中了一个空白页面。然后我稍微更改了代码并传递了"1"下面的字符串,它起作用了。

<?php declare(strict_types=1);

ini_set('display_errors', "1");

function test(): string {

    return [];
}

echo test();
于 2015-07-19T12:30:04.843 回答
-1

正如错误所述,您的函数希望您返回字符串,但您返回的是一个数组!并且功能抱怨这是正常的。因此,在您返回时只需输入一些字符串值。而已!

于 2016-07-06T08:29:03.593 回答