最近我正在查看 PHP 7,特别是返回类型声明 and 类型提示。我已经从源代码编译了 PHP 7(来自Github)并在 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();
这给了我以下TypeError
正如预期的那样可抛出的接口 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} 抛出
/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();
砰,错误消失了,只剩下空白页。我不明白为什么它给我一个空白页?
在搜索了 google 和 RFC 之后,我发现了以下句子RFC,
该 RFC 进一步建议添加新的可选每个文件
指令,declare(strict_types=1);,这使得所有函数调用
文件中的 return 语句具有“严格”的类型检查
标量类型声明,包括扩展和内置 PHP
功能。
这意味着指令没有任何问题declare(strict_types=1)
但问题是我打电话的方式ini_set()
功能。它期望第二个参数是string
type.
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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)