这是我的代码:
function phpwtf(string $s) {
echo "$s\n";
}
phpwtf("Type hinting is da bomb");导致此错误:
可捕获的致命错误:传递给phpwtf()的参数1必须是字符串的实例,字符串给定
看到PHP同时识别和拒绝所需的类型不仅仅是一点奥威尔式的。有五盏灯,该死。
在PHP中,对字符串的类型暗示相当于什么?额外考虑的答案,确切地解释了这里发生了什么。
发布于 2010-11-05 04:09:38
在PHP7之前,类型暗示只能用于强制对象和数组的类型。标量类型不是类型障碍.在本例中,需要类string的一个对象,但您要给它一个(标量) string。错误信息可能很有趣,但它一开始就不起作用。考虑到动态类型系统,这实际上具有某种反常的意义。
只能手动“输入提示”标量类型:
function foo($string) {
if (!is_string($string)) {
trigger_error('No, you fool!');
return;
}
...
}发布于 2010-11-05 04:08:45
在编写此答复时,PHP手册中:
类型提示只能是对象和数组(因为PHP5.1)类型。不支持使用int和string提示的传统类型。
所以你有了。错误信息并没有真正的帮助,不过,我给出了这个信息。
** 2017编辑**
PHP7引入了更多的函数数据类型声明,上述链接已移到函数参数:类型声明中。从这一页:
有效类型
警告 不支持上述标量类型的别名。相反,它们被视为类或接口名称。例如,使用布尔值作为参数或返回类型将需要一个参数或返回值,该参数或返回值是类或接口布尔值的实例,而不是bool类型:上面的示例将输出:致命错误: Uncaught :通过测试()的参数1必须是布尔值、给定的布尔值、在行1中调用并在-:1中定义的实例。
最后一个警告对于理解错误“参数必须类型为string,string给定”具有重要意义;由于大多数情况下只允许类/接口名称作为参数类型,PHP试图定位一个类名"string",但由于它是一个原始类型而找不到,因此在这个尴尬的错误中失败。
发布于 2010-11-05 04:09:42
PHP允许提供类来指定对象的“暗示”。根据PHP手册,“类型提示只能是对象和数组(因为PHP5.1)类型,不支持使用int和string提示的传统类型。”这个错误令人困惑,因为您选择了" string“--将" myClass”放在它的位置,并且错误将以不同的方式读取:“传递给phpwtf()的参数1必须是myClass的一个实例,字符串给定”。
https://stackoverflow.com/questions/4103480
复制相似问题