2012-12-01 50 views
3

我在应用程序中收到奇怪的警告通知。我在课堂中使用自定义usort函数。这是它的外观:PHP注意:无法将Closure类的对象转换为int

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

您的意思是'usort($阵列,自:: zstream_sorter( “the_key”))'? – Esailija

+1

@Esailija是的,你是对的。星期六上午6:45在我的区域,在我的防守 –

回答

7

usort将打电话Class_Name::stream_sorter作为比较函数,传递它两个参数。返回值是一个函数,但usort需要一个整数,告诉它哪个参数更大。你需要的Class_Name::stream_sorter返回值传递给usort,而不是函数本身:

usort($array, self::zstream_sorter()); 
+0

谢谢,它的工作。虽然我稍微修改了排序函数,因为排序后的数组是数组和对象的数组。 –

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]); 
} 
相关问题