类型化属性是否支持类型可调用?



我搜索了原因,但找不到任何原因。

我尝试创建一个类型为"可调用"的类型化属性。但是PHP给了我一个致命的错误"不能有类型可调用"。在 RFC 中,没有提到可调用不是属性类型提示的允许类型。相反,有一些示例使用类型化属性的"可调用"。

请参阅:https://wiki.php.net/rfc/typed-properties

这是什么原因呢?网上有关于这个话题的讨论吗?

提供的链接 https://wiki.php.net/rfc/typed-properties 中的提案状态已被拒绝

在 php7.4 中实现的提案在这里 https://wiki.php.net/rfc/typed_properties_v2,并且有一个关于callable的解释:

不支持可调用类型,因为它的行为是上下文 依赖 以下示例说明了该问题:

class Test {
public callable $cb;
public function __construct() {
// $this->cb is callable here
$this->cb = [$this, 'method'];
}
private function method() {}
}

$obj = new Test;
// $obj->cb is NOT callable here
($obj->cb)();

这意味着可以为财产写入合法价值 然后继续从同一属性读取非法值。这callable伪型的基本问题在很多 有关更多详细信息,请参阅一致的可调用对象 RFC。

建议的解决方法是改用Closure类型,在 与Closure::fromCallable().这可确保 可赎回将保持可赎回,与范围无关。供讨论 处理可调用问题的替代方法,请参阅替代方案 部分。

php7.4 的所有已实现提案的列表 https://wiki.php.net/rfc#php_74。

最新更新