PHP的混合类型与Typescript的任何

Bar*_*art 4 php type-systems typing php-7

mixed在自定义函数中尝试PHP的类型,但这个错误让我感到难过(标点符号是我的):

类型错误:传递给自变量1 <functionName>()必须的一个实例mixed,string给定.

下面的一些(示例)代码导致错误消息,并说明了我希望实现的目标.下面是一些TLDR的进一步解释.但是我认为basicallmixed是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']);
?>
Run Code Online (Sandbox Code Playgroud)

TLDR

我是PHP的新手,但正在尝试'新'显式类型系统.我使用的是PHP 7.x,但我认为这是在PHP 5.0中引入的.我喜欢TypeScript语言的可选输入系统,并且最初假设的mixed工作与anyTypeScript中的类型相同.关于混合PHP文档只强化了这个假设,因为它指出:

mixed表示参数可以接受多个(但不一定是所有)类型.

但是在收到这个错误之后,好像mixed是完全不同的东西.这是用于具有混合类型的值的数组吗?

ᴄʀᴏ*_*ᴢᴇᴛ 9

要实现您想要的功能,您只需要省略mixed而不指定typehint.PHP确实不是一个语言关键字来显式地指定一个参数可以是不同类型.

请注意,mixedIS在文档中命名为关键字,但它不是"语言关键字",而只是PHPDocs中的关键字.这同样适用于array|object,number,void,和其他伪类型.您可以在代码中使用的实际类型以primitivesPHP 命名,请参阅以下文档摘录.


PHP代码中允许的类型提示

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

类/接口名称 - PHP 5.0.0

自我 - PHP 5.0.0

数组 - PHP 5.1.0

可调用 - PHP 5.4.0

bool - PHP 7.0.0

float - PHP 7.0.0

int - PHP 7.0.0

string - PHP 7.0.0

警告:integer并且boolean不能用作typehints

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


PHPdoc注释中允许的类型

PHP原始类型

string一段未指定长度的文本.

int或整数整数,可以是正数也可以是负数.

float一个实数或十进制数,可以是正数也可以是负数.

bool或boolean一个只能包含状态'true'或'false'的变量.

array一组未知类型的变量.可以指定数组成员的类型,有关更多信息,请参阅有关数组的章节.

资源 PHP手册中描述的文件处理程序或其他系统资源.

null包含或返回的值实际上为null.不要将此类型与void混淆,后者是完全没有变量或值(通常与@return标记一起使用).

callable可以由变量传递的函数或方法,有关callables的更多信息,请参阅PHP手册.

关键字(非PHP原生)

混合这种类型的值可以是字面上的任何东西; 文档的作者无法预测它将是哪种类型.

void这不是您要寻找的价值.与此类型关联的标记不会有意返回任何内容.相关元素返回的任何内容都是偶然的,不能依赖.

object返回任何类的对象,

false或true返回显式布尔值; 通常在方法返回'false'或后果时使用.

self使用此类型的类的对象,如果继承,它仍将表示最初定义它的类.

static消耗此值的类的对象,如果继承,则表示子类.(参见PHP手册中的后期静态绑定).

$ this这个确切的对象实例,通常用于表示流畅的界面.

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

  • 只是添加...函数中的无类型php变量已经"混合"了. (3认同)