长话短说,我需要使用usort对一组对象进行排序,我需要告诉我们对象中的哪些字段要排序。
显而易见的解决方案是创建数十个单独的usort排序函数,但这似乎有点多余和丑陋。大多数情况下,对象将按$ _GET的输入进行排序,但并非总是如此,所以我不想直接按$ _GET变量排序。
usort函数是否可以使用当前类的排序函数?像这样的东西
<?php
class myClass
{
public $myArray;
private $by;
public function filter($by)
{
$this->by = $by;
usort($this->myArray, /* Somehow point to the following function: */ );
}
private function srt($a, $b)
{
$c = $this->by; // <- reaching a third variable
// ...
}
}
?>
答案 0 :(得分:2)
是的,将对象和方法名称的数组传递给usort()
:
usort($this->myArray, array($this, 'srt'));
编辑:我已经测试过,只要您在包含私有方法的同一个类中调用usort()
,就可以使用私有方法。
答案 1 :(得分:0)
从方法内部调用usort函数的其他方式。
usort($this->myArray, 'myClass::srt');
usort($this->myArray, array(self::class, 'srt'));