如何使用类方法作为回调函数?

时间:2010-10-01 14:50:52

标签: php oop callback array-walk

如果我在类函数中使用array_walk来调用同一个类的另一个函数

class user
{
   public function getUserFields($userIdsArray,$fieldsArray)
   {

     if((isNonEmptyArray($userIdsArray)) && (isNonEmptyArray($fieldsArray)))
     {
         array_walk($fieldsArray, 'test_print');
     }
   }


  private function test_print($item, $key)
  {
         //replace the $item if it matches something
  }

}

它给我以下错误 -

  

警告:array_walk() [function.array-walk]:无法呼叫   test_print() - 函数不存在于......

那么,如何在使用$this->test_print()时指定array_walk()

3 个答案:

答案 0 :(得分:67)

如果要将类方法指定为回调,则需要指定它所属的对象:

array_walk($fieldsArray, array($this, 'test_print'));

来自manual

  

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

答案 1 :(得分:6)

如果你需要在没有实例化类的情况下调用静态方法,你可以这样做:

// since PHP 5.3
array_walk($fieldsArray, 'self::test_print');

或者从外面:

// since PHP 5.5
array_walk($fieldsArray, User::class.'::test_print');

答案 2 :(得分:1)

要在另一个类方法中将类方法作为回调函数调用,您应该执行以下操作:

public function compareFucntion() {
}

public function useCompareFunction() {
  usort($arrayToSort, [$this, 'compareFucntion'])
}