我在自定义函数中尝试了PHP的mixed
类型,但是这个错误让我感到难过(标点符号是我的):
TypeError:传递给< functionName>()的参数1必须是
mixed
,string
的实例。
下面的一些(示例)代码导致错误消息并说明了我希望实现的内容。下面是一些TLDR的进一步解释。但是basicall我看到mixed
作为一些PHP本机函数的参数类型(例如is_string函数),并希望在自定义函数中执行相同的操作。
如何明确指定函数参数是multitype / mixed / any?
<?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']);
?>
我对PHP很陌生,但正在尝试新的&#39;显式类型系统。我使用的是PHP 7.x,但我认为这是在PHP 5.0中引入的。我喜欢TypeScript语言的可选输入系统,最初假定mixed
的工作方式与TypeScript中的类型any
相同。 PHP documentation on mixed只强化了这一假设,因为它表明:
mixed 表示参数可以接受多个(但不一定是所有)类型。
但是在收到此错误之后,好像mixed
似乎完全不同。这是用于具有混合类型值的数组吗?
答案 0 :(得分:9)
要实现您想要的功能,您只需省略mixed
而不指定类型提示。 PHP NOT 有一个语言关键字来明确指定一个参数可以是不同的类型。
请注意,mixed
在文档中被命名为关键字,但它不是&#39;语言关键字&#39;,而是仅在PHPDocs中的关键字。 array|object
,number
,void
以及其他伪类型也是如此。您可以在代码中使用的实际类型在PHP中命名为primitives
,请参阅以下文档摘录。
以下是允许的类型和使用它们的最低PHP版本:
类/接口名称 - PHP 5.0.0
自我 - PHP 5.0.0
数组 - PHP 5.1.0
可调用 - PHP 5.4.0
bool - PHP 7.0.0
浮动 - PHP 7.0.0
int - PHP 7.0.0
字符串 - PHP 7.0.0
警告:integer
和boolean
不能用作打字提示
来源:http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
PHP原始类型
string 一段未指定长度的文字。
int或整数整数,可以是正数也可以是负数。
float 可以是正数或负数的实数或小数。
bool或boolean 一个只能包含状态'true'或'false'的变量。
array 未知类型的变量集合。可以指定数组成员的类型,有关更多信息,请参阅有关数组的章节 信息。
资源 PHP手册中描述的文件处理程序或其他系统资源。
null 包含或返回的值实际上为空。这种类型不要与void混淆,后者是完全没有a 变量或值(通常与@return标记一起使用)。
callable 可以通过变量传递的函数或方法,有关callables的更多信息,请参阅PHP手册。
关键字(非PHP原生)
混合此类型的值可以是字面上的任何内容;文档的作者无法预测它将是哪种类型。
void 这不是您要查找的值。与此类型关联的标记不会有意返回任何内容。 相关元素返回的任何内容都是偶然的,而不是 可靠的。
object 返回任何类的对象,
false或true 返回显式布尔值;通常在方法返回'false'或其后果时使用。
self 使用此类型的类的对象,如果继承,它仍将表示最初定义它的类。
static 使用此值的类的对象,如果继承,则表示子类。 (见后期静态绑定 在PHP手册中。)
$ this 这个确切的对象实例,通常用于表示流畅的界面。
来源: https://www.phpdoc.org/docs/latest/guides/types.html#primitives
答案 1 :(得分:0)
您必须使用$current
来使用该foreach
块