2015-12-18 25 views
1

我試圖在PHP 5.5中使用uksort來按數組排序數組。這不起作用。要麼拋出一個異常,指定的類無效或沒有任何反應:uksort不起作用 - 回調未執行或異常

namespace some\name\space 

class myClass extends someClass { 
    public function someFunction { 
     $theArray = array(
      "key1" => "value1", 
      "key2" => "value2", 
      ... 
      "keyN" => "valueN" 
     ); 

     // Exception "Fatal Error: Class name must be a valid object or a string" 
     uksort($theArray, array($this, "sorterFunc")); 
     uksort($theArray, array("someClass", "sorterFunc")); 
     uksort($theArray, array("some\name\space\someClass", "sorterFunc")); 
     uksort($theArray, "self::sorterFunc"); 
     uksort($theArray, "some\name\space\someClass::sorterFunc"); 

     // No effect. No logging from sorterFunc and 
     // key/value order stays the same. 
     uksort($theArray, "sorterFunc"); 
     uksort($theArray, "someClass::sorterFunc"); 
    } 

    public static function sorterFunc($a, $b) { 
     myLogger->info("sorterFunc called"); 
     return $this->CompareASomehowToB($a, $b); 
    } 
} 

所以我沒有在docu或以任何例如工作中發現的呼叫。當我跳過uksort並使用call_user_func時,結果完全相同。

那麼,這裏可能會出現什麼問題?

+1

...'myClass' not'someClass' – cmorrissey

回答

1

您正在嘗試撥打someClass::sorterFunc,因爲它實際上是myClass::sorterFunc,因此您正在擴展someClassmyClass

uksort($theArray, "myClass::sorterFunc");