如何通过传递字符串名称来调用方法作为回调参数?

问题描述 投票:0回答:2

我有以下代码:

public function compareObjects($object1, $object2){
    return $object1->id - $objects2->id
}

$diff = array_udiff($array1, $array2, 'compareObjects');

但是一直说compare方法不存在或者是一个无效的函数名....

我以为我做对了?

php arrays object callback comparison
2个回答
4
投票

实例化对象的方法作为数组传递,该数组包含索引 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:回调


1
投票

它正在寻找纯函数,而不是类方法。您需要使用

$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 函数与回调函数/方法一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.