You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7闭包类型是什么?PHP7.1+代码如何填充最具体参数类型?

PHP 7 闭包类型及容器代码的类型提示解决方案

首先回答你的第一个问题:在PHP 7中,闭包(匿名函数)的基础类型是 Closure 类——所有闭包都是这个类的实例。不过从PHP 7.1开始,我们可以利用更精确的类型声明来描述闭包的具体行为,比如它的参数和返回值类型。

接下来看你的容器代码,你需要的是一个无参数、返回Cache实例的闭包。针对PHP 7.1+环境,分两种情况给出最具体的类型:

1. 如果你使用的是PHP 7.4及以上版本(推荐)

PHP 7.4引入了对可调用类型签名的支持,你可以直接用 callable(): Cache 作为类型提示,这是最精确的写法,明确告诉PHP这个参数是一个无参数、返回Cache对象的可调用闭包:

public function configureCache(callable(): Cache $closure) {
    $this->recipes['cache'] = $closure;
}

2. 如果需要兼容PHP 7.1到7.3版本

这些版本不支持带返回类型的callable签名,所以最具体的类型只能用 Closure,同时可以通过PHPDoc注释来补充精确的类型信息,让IDE和其他开发者更清楚这个闭包的行为:

/**
 * @param Closure(): Cache $closure 无参数且返回Cache实例的闭包
 */
public function configureCache(Closure $closure) {
    $this->recipes['cache'] = $closure;
}

另外补充两个代码修正点,避免运行报错:

  • 类的私有属性$recipes和$instances需要用$this->访问,比如$this->recipes['cache']而非直接写$recipes['cache']
  • 建议在构造函数中初始化这两个属性为空数组,避免未定义错误:
    public function __construct() {
        $this->recipes = [];
        $this->instances = [];
    }
    

内容的提问来源于stack exchange,提问作者William Entriken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:24:45