我有一个像PHP这样的课程:
class RandomNumberStorer{
var $integers = [];
public function store_number($int){
array_push($this->integers, $int);
}
public function run(){
generate_number('store_number');
}
}
...其他我有一个函数,它将一个函数作为参数,比如说:
function generate_number($thingtoDo){
$thingToDo(rand());
}
所以我初始化一个RandomNumberStorer
并运行它:
$rns = new RandomNumberStorer();
$rns->run();
我收到一条错误消息,指出存在'调用未定义函数store_number'。现在,我理解,store_number
在RandomNumberStorer
类中,它更像是一种方法,但有没有办法可以将类方法传递给generate_number
函数?
我已经尝试将store_number
函数移出课程,但是当然,我在类/实例的上下文中得到了与$this
的引用有关的错误。
我希望避免将RandomNumberStorer
的实例传递给外部generate_number
函数,因为我在其他地方使用此函数。
甚至可以这样做吗?我设想的是:
generate_number('$this->store_number')
答案 0 :(得分:10)
您需要将当前实例的RandomNumberStore::store_number
方法描述为callable。手册页说明如下:
实例化对象的方法作为包含的数组传递 索引为0的对象和索引为1的方法名称。
所以你要写的是:
generate_number([$this, 'store_number']);
顺便说一下,你也可以用另一种方式做同样的事情,从技术角度来看更糟糕,但更直观:
generate_number(function($int) { $this->store_number($int); });