php - 类型提示 : Default Parameters

标签 php type-hinting default-parameters

PHP 5 Type Hinting

PHP 5 引入了类型提示。函数现在可以强制参数为对象(通过在函数中指定类的名称原型(prototype))或数组(自 PHP 5.1 起)。但是,如果将 NULL 用作默认参数值,则允许将其作为以后任何调用的参数。

以上摘录如下:

如果 NULL 被用作默认参数值,它将被允许作为任何后续调用的参数。

上面的意思是:

如果默认参数与类型提示一起使用,它只能有 NULL 作为默认值。

code1 中的代码错误并导致:

fatal error :具有类类型提示的参数的默认值只能是 NULL

代码1:

 function setName ( string $name = "happ") {
  ...
  }

代码 2 中的代码是正确的:

代码2:

 function setName ( string $name = NULL) {
  ...
  }

为什么在php中赋值这个约束?

最佳答案

你不能输入提示字符串,你只能输入提示对象和数组,所以这是不正确的:

function setName ( string $name = "happ") {

(这里没有出现编译时错误的原因是 PHP 将“字符串”解释为类名。)

文档中的措辞意味着如果您这样做:

function foo(Foo $arg) {

那么传递给 foo() 的参数必须是对象 Foo 的一个实例。但如果你这样做:

function foo(Foo $arg = null) {

那么传递给 foo() 的参数可以是对象 Foo 的实例,也可以是 null。另请注意,如果您这样做:

function foo(array $foo = array(1, 2, 3))

那么你不能调用 foo(null)。如果你想要这个功能,你可以这样做:

function foo(array $foo = null) {
    if ($foo === null) {
        $foo = array(1, 2, 3);
    }

[Edit 1] 从 PHP 5.4 开始,您可以键入提示 callable:

function foo(callable $callback) {
    call_user_func($callback);
}

[Edit 2] 从 PHP 7.0 开始,您可以键入提示 boolfloat intstring。这使得问题中的代码有效语法。从 PHP 7.1 开始,您可以键入提示 iterable

关于php - 类型提示 : Default Parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522984/

相关文章:

php - 在 mysql 和 php 中的真实排名

python - mypy 错误 - 尽管使用了 'Union',但类型不兼容

Python 元编程 : generate a function signature with type annotation

python - 如何注释父类方法以便子方法返回它们自己的实例?

c++ - 为什么默认参数没有在 Release 中完全初始化? (调试与发布)

php - 自连接获取mysql中的最大深度数

PHP 将 Paypal 支付分成两个账户

php - 在 php 中格式化 linux 命令输出

elixir - 为什么我不能在此 Elixir 列表求和中使用默认参数?

带不完整参数的 C++ 函数调用