在PHP中传递方法作为参数

时间:2013-09-09 21:45:59

标签: php function parameters

我有一个像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_numberRandomNumberStorer类中,它更像是一种方法,但有没有办法可以将类方法传递给generate_number函数?

我已经尝试将store_number函数移出课程,但是当然,我在类/实例的上下文中得到了与$this的引用有关的错误。

我希望避免将RandomNumberStorer的实例传递给外部generate_number函数,因为我在其他地方使用此函数。

甚至可以这样做吗?我设想的是:

 generate_number('$this->store_number')

1 个答案:

答案 0 :(得分:10)

您需要将当前实例的RandomNumberStore::store_number方法描述为callable。手册页说明如下:

  

实例化对象的方法作为包含的数组传递   索引为0的对象和索引为1的方法名称。

所以你要写的是:

generate_number([$this, 'store_number']);

顺便说一下,你也可以用另一种方式做同样的事情,从技术角度来看更糟糕,但更直观:

generate_number(function($int) { $this->store_number($int); });