最近,我一直在研究 PHP 7 的技术,尤其是 返回类型声明 和 类型提示。我从 Github 上编译了 PHP 7 源代码(master 分支),并在 Ubuntu 14.04 虚拟机中运行它。我尝试运行以下代码来测试新的 异常,但结果只出现了一个空白页面。
<?php
function test(): string {
return [];
}
echo test();
接着我意识到需要在屏幕上显示错误信息。因此,我添加了如下的老式代码:ini_set('display_errors', 1);
<?php
ini_set('display_errors', 1);
function test(): string {
return [];
}
echo test();
根据Throwable接口的RFC,我得到了以下TypeError
,这是预期的结果。
致命错误:在/usr/share/nginx/html/test.php的第7行中返回值类型必须为字符串(test() must be of the type string),但返回了数组(array returned)。堆栈跟踪:#0 /usr/share/nginx/html/test.php(10):test() #1 {main},并在/usr/share/nginx/html/test.php的第7行抛出异常。
进一步研究后,我在顶部添加了declare(strict_types=1);
,如下所示:
<?php declare(strict_types=1);
ini_set('display_errors', 1);
function test(): string {
return [];
}
echo test();
然后,崩溃了,错误消失了,留下了一个空白页面。我弄不明白为什么会给我一个空白页面?