我在申请表中收到了一个奇怪的警告通知。我在课堂上使用自定义usort
功能。这是它的外观:
class Class_Name
{
function zstream_builder()
{
$array = some_array();
//sort posts by date DESC
usort($array, array('Class_Name', 'zstream_sorter')); // <- the notice is thrown on this line
return $array;
}
private static function zstream_sorter($key = 'sort_str_date')
{
return function ($a, $b) use ($key)
{
return strnatcmp($a[$key], $b[$key]);
};
}
}
这是我得到的通知:
Notice: Object of class Closure could not be converted to int in PATH_TO_FILE on line xx
任何想法?
答案 0 :(得分:7)
usort
将Class_Name::stream_sorter
称为比较函数,并将两个参数传递给它。返回值是一个函数,但是usort
需要一个整数来告诉它哪个参数更大。您需要将Class_Name::stream_sorter
的返回值传递给usort
,而不是函数本身:
usort($array, self::zstream_sorter());
答案 1 :(得分:1)
您的比较函数需要返回一个int,而不是一个函数。
如果要选择排序字段,则应使用
protected $key = 'sort_str_date';
function zstream_builder()
{
$array = some_array();
//sort posts by date DESC
usort($array, array($this, 'z_sorter'));
return $array;
}
function z_sorter($a, $b)
{
return strnatcmp($a[$this->key], $b[$this->key]);
}