PHP方法定义中冒号问号加类名(:?类名)的语法是什么含义?
PHP方法名后接?:类名语法的含义
该语法是PHP 7.1版本引入的可为空返回类型声明,用于明确限定方法的合法返回值范围,具体规则如下:
- 冒号后标注的类名是方法允许返回的对象类型
- 类名前的问号表示返回值允许为
null - 方法只能返回指定类的实例或
null,返回其他类型值时PHP会抛出TypeError类型错误
你给出的简化代码示例:
public function someMethod(): ?SomeClass
表示someMethod方法的返回值只能是SomeClass类的实例,或者null。
完整函数示例的含义:
public function getParentProject(): ?ParentProjectTester { return $this->parentProject; }
这段代码明确要求getParentProject方法只能返回ParentProjectTester类的实例,或者null。如果$this->parentProject的实际值是字符串、整数、其他类实例等非指定类型内容,代码运行时会直接抛出类型错误。
补充说明:PHP 7.0版本就已经支持不带问号的返回类型声明(如: SomeClass),要求方法必须返回指定类的实例,不允许返回null,PHP 7.1新增的问号语法就是为了兼容需要返回空的业务场景。
内容的提问来源于stack exchange,提问作者Robert Sinclair
相关产品推荐
相关产品推荐

