【发布时间】:2017-05-07 04:07:25
【问题描述】:
我在自定义函数中尝试 PHP 的 mixed 类型,但这个错误让我很困惑(标点符号是我的):
TypeError: 传递给
() 的参数 1 必须是mixed、string的实例。
下面的一些(示例)代码会导致错误消息并说明我希望实现的目标。下面是一些带有进一步解释的 TLDR。但基本上我将mixed 视为一些PHP 原生函数(例如is_string 函数)的参数类型,并希望在自定义函数中做同样的事情。
如何明确指定函数参数是多类型/混合/任意?
代码
<?php
function echoMixed(mixed $input) {
if (!is_array($input)) {
echo mixed;
} else {
// For arrays echo each element using recursive call.
foreach($input as $current) {
echoMixed($current);
}
}
}
echoMixed('test'); // <-- This results in the error.
echoMixed(['test1', 'test2']);
?>
TLDR
我对 PHP 还很陌生,但正在尝试“新的”显式类型系统。我使用的是 PHP 7.x,但我认为这是在 PHP 5.0 中引入的。我喜欢 TypeScript 语言的可选类型系统,最初假设 mixed 的工作方式与 TypeScript 中的类型 any 相同。 PHP documentation on mixed 只是加强了这一假设,因为它指出:
混合表示一个参数可以接受多种(但不一定是全部)类型。
但收到此错误后,mixed 似乎完全不同了。这是否适用于具有混合类型或其他值的数组?
【问题讨论】:
-
在函数的第二行,我想你的意思是:
if (!is_array($input)) {。
标签: php php-7 type-systems typing