【发布时间】:2026-02-12 01:35:01
【问题描述】:
好的,所以我定义了这个类方法来接受回调,并且我已经根据类型提示文档将其类型提示为可调用。
protected function AddTransformData(array $definition,array $where,callable $callback){
$this->transforms[]=[$definition,$where,$callback];
}
这是我可能调用此函数的示例。使用数组语法将方法和对象作为回调传递。
public function __construct(PostalZoneMapping $pzm){
$this->pzm=$pzm;
$this->AddTransformData(Countries::region,['filter'],[$this,'TransformId']);
$this->AddTransformData(PostalZones::id,['filter'],[$this,'TransformId']);
$this->ReceiveData();
}
这会引发错误,如下图,抱怨参数 3 不是可调用的,而是一个数组。从逻辑上讲,我想这是有道理的,因为它是数组,但它是一个可调用函数的数组——它肯定必须检测到它是一个回调吗?
这是 PHP 的怪癖还是我做错了什么?
【问题讨论】:
-
是什么产生了异常?我试图创建类似的东西,但无法重现结果。您能否创建一组简单的代码来重现问题中的此错误。
-
这不就是IDE错误吗?实际运行代码是否遇到了真正的异常?这是什么 IDE - 也许它不理解可调用数组表示法。
-
您的“TransformId”方法有哪些可见性?它不是私有的还是受保护的?
-
@IvanShumakov 根据文档:
Accessing protected and private methods from within a class is allowed.- 所以即使它在此类的上下文中是私有的,它也应该是有效的可调用对象? -
好吧,事实证明它不是在单个类的上下文中,而是在父-子的上下文中。然后它必须至少受到保护,以便它可以在父级中调用。
标签: php