如果我声明空白页(strict_types=1);在文件顶部的 PHP 7
Blank page if I declare(strict_types=1); in PHP 7 at top of the file
最近我正在查看 PHP 7,特别是 return type declaration and type hinting. I have compiled PHP 7 from source(master branch from Github) and running it in Ubuntu 14.04 virtual box. I tried to run following code to get a test of new 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();
根据此 Throwable interface RFC
,这让我如预期的那样关注 TypeError
Fatal error: Uncaught TypeError: Return value of test() must be of the
type string, array returned in /usr/share/nginx/html/test.php on line
7 in /usr/share/nginx/html/test.php:7 Stack trace: #0
/usr/share/nginx/html/test.php(10): test() #1 {main} thrown in
/usr/share/nginx/html/test.php on line 7
进一步挖掘,我在顶部添加了 declare(strict_types=1);
,如下所示,
<?php declare(strict_types=1);
ini_set('display_errors', 1);
function test(): string {
return [];
}
echo test();
砰的一声,错误消失了,留下了空白页。我不明白为什么它给我一个空白页?
在搜索 google 和 RFC 后,我在 RFC、
中找到了以下句子
This RFC further proposes the addition of a new optional per-file
directive, declare(strict_types=1);, which makes all function calls
and return statements within a file have “strict” type-checking for
scalar type declarations, including for extension and built-in PHP
functions.
这意味着指令 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();
正如错误所述,您的函数希望您使用 return 字符串,但您却 return 一个数组!和功能抱怨这是正常的。所以在你的 return 上简单地放一些字符串值。就是这样!
最近我正在查看 PHP 7,特别是 return type declaration and type hinting. I have compiled PHP 7 from source(master branch from Github) and running it in Ubuntu 14.04 virtual box. I tried to run following code to get a test of new 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();
根据此 Throwable interface RFC
,这让我如预期的那样关注TypeError
Fatal error: Uncaught TypeError: Return value of test() must be of the type string, array returned in /usr/share/nginx/html/test.php on line 7 in /usr/share/nginx/html/test.php:7 Stack trace: #0 /usr/share/nginx/html/test.php(10): test() #1 {main} thrown in /usr/share/nginx/html/test.php on line 7
进一步挖掘,我在顶部添加了 declare(strict_types=1);
,如下所示,
<?php declare(strict_types=1);
ini_set('display_errors', 1);
function test(): string {
return [];
}
echo test();
砰的一声,错误消失了,留下了空白页。我不明白为什么它给我一个空白页?
在搜索 google 和 RFC 后,我在 RFC、
中找到了以下句子This RFC further proposes the addition of a new optional per-file directive, declare(strict_types=1);, which makes all function calls and return statements within a file have “strict” type-checking for scalar type declarations, including for extension and built-in PHP functions.
这意味着指令 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();
正如错误所述,您的函数希望您使用 return 字符串,但您却 return 一个数组!和功能抱怨这是正常的。所以在你的 return 上简单地放一些字符串值。就是这样!