在带有类私有函数的 php 中使用 usort

新手上路,请多包涵

ok 使用带有函数的 usort 并没有那么复杂

这就是我之前在线性代码中的内容

function merchantSort($a,$b){
    return ....// stuff;
}

$array = array('..','..','..');

排序我只是做

usort($array,"merchantSort");

现在我们正在升级代码并删除所有全局函数并将它们放在适当的位置。现在所有代码都在一个类中,我不知道如何使用 usort 函数对数组进行排序,其参数是对象方法而不是简单函数

class ClassName {
   ...

   private function merchantSort($a,$b) {
       return ...// the sort
   }

   public function doSomeWork() {
   ...
       $array = $this->someThingThatReturnAnArray();
       usort($array,'$this->merchantSort'); // ??? this is the part i can't figure out
   ...

   }
}

问题是我如何在 usort() 函数中调用对象方法

原文由 Ibu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 715
2 个回答

使您的排序功能静态:

 private static function merchantSort($a,$b) {
       return ...// the sort
}

并为第二个参数使用数组:

 $array = $this->someThingThatReturnAnArray();
usort($array, array('ClassName','merchantSort'));

原文由 Demian Brecht 发布,翻译遵循 CC BY-SA 3.0 许可协议

这对我有用,我希望它可以帮助某人:

 usort($array, [ClassName::class, "functionName"]);

将“ClassName”替换为您的 PHP 类的名称,将“functionName”替换为您的私有静态函数的名称。

如果一切都发生在自己的类中,那么这个也可以:

 usort($array, [self::class, "functionName"]);

将“functionName”替换为您的私有静态函数的名称。

原文由 edier88 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题