首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP的混合类型与类型记录的任意

PHP的混合类型与类型记录的任意
EN

Stack Overflow用户
提问于 2016-12-21 16:41:53
回答 1查看 7.2K关注 0票数 5

我在一个自定义函数中尝试PHP的mixed类型,但是这个错误让我很困惑(标点符号是我的):

TypeError:传递给()的参数1必须是mixedstring给定的实例。

下面的一些(示例)代码导致错误消息,并说明了我希望实现的目标。下面是一些TLDR的进一步解释。但是,我认为mixed是一些PHP本机函数(例如字符串函数)的参数类型,并且希望在自定义函数中也这样做。

如何显式地指定函数参数是多类型/混合/任意?

代码

代码语言:javascript
复制
<?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非常陌生,但我尝试的是“新”显式系统。我正在使用PHP7.x,但我认为这是在PHP5.0中引入的。我喜欢TypeScript语言的可选类型系统,并且最初假设mixed的工作方式与TypeScript中的类型any相同。关于混合的PHP文档加强了这一假设,因为它指出:

混合表示参数可以接受多种(但不一定是所有)类型。

但在收到此错误后,似乎mixed完全不同了。这是否适用于具有混合类型值的数组?

EN

回答 1

Stack Overflow用户

发布于 2016-12-21 16:47:26

要实现您想要的结果,只需省略mixed而不指定类型提示即可。PHP ,而不是,有一个语言关键字来显式指定一个参数,可以是不同的类型。

注意,mixed在文档中被命名为关键字,但它不是'language关键字‘,而是仅在PHPDocs中的关键字。array|objectnumbervoid和其他伪类型也是如此。您可以在代码中使用的实际类型在PHP中名为primitives,请参阅下面的文档摘录。

PHP代码中允许的类型提示

以下是允许使用它们的类型和最低PHP版本:

类/接口名-PHP5.0.0 self -PHP5.0.0 数组-PHP5.1.0 可调用-PHP5.4.0 bool -PHP7.0.0 浮动-PHP7.0.0 int -PHP7.0.0 字符串-PHP7.0.0 混合-PHP8.0.0 静态-PHP8.0.0(仅用于返回类型)

PHP8.0还引入了具有以下语法的联合类型:bool|string,它将允许布尔值或字符串。(rfc)

警告integerboolean不能用作类型提示

来源:http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

允许在PHPdoc注释中输入

PHP原语类型

字符串一段未指定长度的文本。 、int或整数:一个整数,它可以是正整数,也可以是负数。 浮点实数或十进制数,可以是正数,也可以是负数。 bool或bool只能包含状态‘true’或‘false’的变量。 数组未知类型变量的集合。可以指定数组成员的类型,有关更多信息,请参阅关于数组的章节。 资源文件处理程序或其他系统资源,如PHP手册中所述。 包含或返回的值实际上为空。这种类型不应与void混淆,后者指的是变量或值的完全缺失(通常与@ be标记一起使用)。 可调用的--可以通过变量传递的函数或方法,有关可调用性的更多信息,请参见手册。

关键词(非PHP本机)

混合A值可以从字面上说是任何类型;文档的作者无法预测它的类型。 --这不是您要寻找的值。与此类型关联的标记不会有意返回任何内容。关联元素返回的任何内容都是偶然的,不需要依赖。 对象返回任何类的对象, false或true返回显式布尔值;通常在方法返回‘false’或某些重要内容时使用。 self --使用该类型的类的对象,如果继承,它仍将表示最初定义它的类。 静态--使用此值的类的对象,如果继承它将表示子类。(请参阅PHP手册中的后期静态绑定)。 $this这个精确的对象实例,通常用来表示一个fluent接口。

来源:https://www.phpdoc.org/docs/latest/guides/types.html#primitives

更新2021

mixed类型被引入到PHP8中,static类型在PHP8中被引入

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41267772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档