【问题标题】:Why is this callback function not working?为什么这个回调函数不起作用?
【发布时间】:2013-01-20 01:28:00
【问题描述】:
我有以下代码:
public function compareObjects($object1, $object2){
return $object1->id - $objects2->id
}
$diff = array_udiff($array1, $array2, 'compareObjects');
但它一直说比较方法不存在或者是无效的函数名......
我认为我这样做对了吗?
【问题讨论】:
标签:
php
arrays
object
callback
comparison
【解决方案1】:
实例化对象的方法作为数组传递,其中包含索引为 0 的对象和索引为 1 的方法名称。
// Functions
$diff = array_udiff($array1, $array2, 'compareObjects');
// Object methods
$diff = array_udiff($array1, $array2, array($this, 'compareObjects'));
// -OR-
$diff = array_udiff($array1, $array2, array($my_obj, 'compareObjects'));
// Static class methods
$diff = array_udiff($array1, $array2, 'some_class::compareObjects'); // PHP 5.2.3+
PHP: Callbacks
【解决方案2】:
它正在寻找一个纯函数,而不是一个类方法。您需要使用$this,就像对类方法的任何调用一样。
你需要这样做......
$diff = array_udiff($array1, $array2, array($this, 'compareObjects'));
同样,如果你在课堂外使用它,你需要像这样使用它......
$objRandom = new Whatever;
// do some fancy PHP stuff, or not
$diff = array_udiff($array1, $array2, array($objRandom, 'compareObjects'));
这几乎是如何将任何 PHP 函数与回调函数/方法一起使用。