为什么空的输出函数字符串不能覆盖整数?

时间:2019-06-02 15:54:40

标签: php function types casting output

为什么关注函数返回1(整数):

<?php

function f() : int
{
    return '1';
}

但是调用此函数:

function f() : int
{
    return '';
}

会引发错误:

Fatal error: Uncaught TypeError: Return value of f() must be of the type int, string returned in /Users/alm/test_int.php:5

在我看来,它应该返回0(整数)。 请发送有关函数输出类型转换的php文档链接。谢谢!

2 个答案:

答案 0 :(得分:0)

尽管我不理解您的断言,即从空字符串到int的隐式转换将导致0,但您确实可以使用显式类型转换来实现。

考虑以下代码:

function f() :  int {
    return '0';
}

function g() :  int {
    return (int)'';
}

function h() :  int {
    return '';
}

echo 'f: ' . f();
echo '<br />';
echo 'g: ' . g();
echo '<br />';
echo 'h: ' . h();

函数g实际上返回一个值为int的{​​{1}}。函数0不起作用(它与示例中的函数匹配)。输出为:

h

因此,如果您在函数返回时执行了显式强制转换(即f: 0 g: 0 FATAL ERROR Uncaught TypeError: Return value of h() must be of the type integer, string returned in ... ),则会得到return (int)'';

如果要接受字符串参数,然后将其输出为int,只需再次使用显式强制转换:

0

输出:

function f($p) :  int {
    return (int)$p;
}

echo '0: ' . f(0);
echo '<br />';
echo "'0': " . f('0');
echo '<br />';
echo "'': " . f('');

答案 1 :(得分:0)

最后,我找到了解释为什么'不能转换为0的文档:

  

†不接受非数字字符串。带有结尾字符的数字字符串会被接受,但会发出提示。

请参见here中的“弱类型检查的行为”