【问题标题】: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 函数与回调函数/方法一起使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        相关资源
        最近更新 更多