使用此代码重现
<?php
$justReturn1 = function() { return 1;};
class A {
public $f;
public function __construct($func) {
$this->f = $func;
}
}
$instance = new A($justReturn1); // Create instance
$f = $instance->f; // Assign the function within $instance->f to a variable external to object
echo $f(); // Returns: 1
echo $instance->f(); // Returns: Fatal error: Call to undefined method A::f()
如果将其分配给变量,则可以调用相同的函数,但如果将其分配给对象属性则无法调用。
这真的很烦人,因为我一直指望这种一致性(常识)。
我正在编写一个接收大型配置数组的类,其中包含一些验证函数。然后我将这些验证函数存储在一个对象上就好了,但我需要一个间接步骤(创建一个变量并为它分配这个函数),然后才能调用它们!
我的测试中有缺陷吗?这实际上是PHP未实现吗?