【问题标题】:Defining multiple function argument types in PHP在 PHP 中定义多个函数参数类型
【发布时间】:2011-12-13 21:26:58
【问题描述】:

是否可以将函数参数定义为多种可能的类型?例如,一个函数可能需要一个字符串或一个整数来完成某事。有可能以某种方式这样定义吗?

    function something(int|string $token) {}

或者每个参数只支持一种类型?

(请注意,我知道我可以稍后过滤输入,我只想输入我的参数)

【问题讨论】:

标签: php function


【解决方案1】:

您可以做的最好的事情称为类型提示,并在此处进行解释:

http://php.net/manual/en/language.oop5.typehinting.php

特别是,您可以提示类类型或数组类型,但(如手册所述)“不支持使用 int 和字符串进行传统类型提示。”所以我猜你想要完成的事情在这个级别是不可能的。

但是,您可以创建自己的包装器等。可能有上千种方法来处理它。

【讨论】:

  • 干杯,我终于知道它现在叫做类型提示了。
  • 它在 PHP 中被称为提示(仅?),因为它实际上只是对 PHP 解释器的提示,因此被指示“人为”检查参数类型,如果没有则抛出错误与提示相匹配。在静态类型语言中,它是基本且必需的东西,是函数语法的一部分,它不是那样调用的......事实上我认为它没有特定的名称......
【解决方案2】:

不,这是不可能的。

此外,PHP 5 中的类型提示现在仅适用于类和数组。 http://php.net/manual/en/language.oop5.typehinting.php

class Foo
{
}

function something(Foo $Object){}

【讨论】:

    【解决方案3】:

    PHP 是动态类型的 - 但语言中已添加类型提示 - 因此,如果您没有提示参数,您可以传递任何您喜欢的类型:

    function something($token) 
    {
       if (is_numeric($token)) {
         // its a float, double, integer
    
       } else {
         // its a string, array, object
       }
    }
    

    (我不知道如何处理资源)。

    但是,如果您想使用强类型语言进行编程,那么(恕我直言)您应该使用 PHP 以外的其他语言

    【讨论】:

    • is_numeric 还包括数字字符串,但不包括资源。
    【解决方案4】:

    2020 年更新:

    联合类型在 PHP 8.0 中具有 finally been implemented,预计在 2020 年底发布。

    它们可以这样使用:

    class Number {
        private int|float $number;
    
        public function setNumber(int|float $number): void {
            $this->number = $number;
        }
    
        public function getNumber(): int|float {
            return $this->number;
        }
    }
    

    【讨论】:

    • 太棒了,随着 PHP 8 成为规范,这将是一个有用的工具。
    猜你喜欢
    • 2016-10-20
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2020-07-24
    • 2022-01-26
    相关资源
    最近更新 更多