当前位置: 首页 > 知识库问答 >
问题:

使用类型暗示时无法传递null参数

柯新翰
2023-03-14

以下代码:

<?php

    class Type {

    }

    function foo(Type $t) {

    }

    foo(null);

?>

运行时失败:

PHP Fatal error:  Argument 1 passed to foo() must not be null

为什么不允许像其他语言一样传递null?

共有3个答案

周凯捷
2023-03-14

尝试:

function foo(Type $t = null) {

}

查看PHP函数参数。

赏新知
2023-03-14

从PHP7.1开始,可以使用null类型,作为函数返回类型和参数。类型?T可以具有指定类型的值T,或null

所以,你的函数可以看起来像这样:

function foo(?Type $t)
{

}

只要您能够使用PHP7.1,这种表示法就应该优先于函数foo(Type$t=null),因为它仍然会强制调用方显式指定参数$t的参数。

刘高峯
2023-03-14

PHP 7.1或更新版本(2016年12月2日发布)

您可以使用此语法将变量显式声明为null

function foo(?Type $t) {
}

这将导致

$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error

因此,如果您想要一个可选参数,您可以遵循约定Type$t=null,而如果您需要使一个参数同时接受null及其类型,您可以遵循上面的示例。

你可以在这里读更多。

PHP7.0或更高版本

您必须添加一个默认值,如

function foo(Type $t = null) {

}

这样,就可以传递一个空值。

手册中关于类型声明的章节中记录了这一点:

如果参数的默认值设置为NULL,则可以声明接受NULL值。

 类似资料:
  • 问题内容: 我正在为核心数据编写通用包装类。 这是我的一些基本类型。没什么特别的。 我已经将我的coredata写在协议中抽象化了。如果您让我知道您对我要提出的抽象的意见,我将不胜感激。但是在扩展中,我遇到了以下错误: 无法将类型“ NSFetchRequest”的值转换为预期的参数类型“ NSFetchRequest <_>” 不确定我该如何解决。我尝试了各种更改代码的尝试,但未成功…… 另外,

  • 问题总结:我想传递一个带有类型参数(如

  • 我是静态编程语言的新手,我发现静态编程语言不同于Java的特性之一是方法默认参数。https://kotlinlang.org/docs/functions.html#default-arguments 我正在创建一个简单的Kotlin应用程序,它将null值传递给具有2个不可为null的默认参数的方法,这会导致编译错误-类型不匹配:推断的类型是String?但应为字符串)。 一种解决方法是将方法

  • 问题内容: 问题摘要: 我想将具有类型参数(例如)的类作为类型参数传递给泛型方法。 假设我有一个方法: 当然,此方法对于任何类型的类都可以正常使用。我可以这样调用该方法,例如: 问题: 我发现我不能这样做: 从句法上讲,这显然是无效的。但是,我不确定如何实现这样的目标。我当然可以通过,但是泛型类型的添加使其在语法上不再有效,并且我想不出解决方法。 唯一的直接解决方案是这样的事情(看起来很愚蠢):

  • 如何执行?因为当我运行它时,它说,。 我是否应该删除,并在函数中对其进行实例检查?但是,我如何访问

  • 本文向大家介绍String类型传递是值传递,char[]类型传递是引用传递的实现,包括了String类型传递是值传递,char[]类型传递是引用传递的实现的使用技巧和注意事项,需要的朋友参考一下 如下所示: 结果是:str任然是hello,ch的第一个元素a变为c 以上就是小编为大家带来的String类型传递是值传递,char[]类型传递是引用传递的实现的全部内容了,希望对大家有所帮助,多多支持呐