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
相关产品推荐
相关产品推荐

