PHP代码中嵌套函数需要修正


PHP Hacky code with nested functions needs correction

嘿,伙计们,我有一些严重的黑客代码正在进行嵌套函数,但我不能让它工作,因为某种原因与闭包或lambda函数,我认为这将是可取的,有人会帮助我理解我如何能把它变成闭包,lambda或其他东西,以不污染我的全局作用域与不必要的B.S. ?

这是我的两个方法

/**
 * Sort an array of object is ASC order.
 * @param   object  $objArray   An array of objects
 * @return  object  Sorted array of objects
 */
protected function objSort($objArray) 
{
    // turns an Object Array into and Assoc Array
    $array = self::objToArr($objArray);
    // avoid recursively declaring the function
    if (! function_exists('dsort')) 
    {
        // nested functions are stupid.
        function dsort(&$array) 
        {
            foreach ($array AS &$current) 
            {
                if (is_array($current)) dsort($current);
            }
            ksort($array);
        }
    }
    dsort($array);
    // back to an Object Array
    return $objArray = json_decode(json_encode($array));
}
/**
 * Turns an object array into an associative multidimensional array.
 * @param   object  $object     An array of objects
 * @return  array   An associative array    
 */
private static function objToArr($object) 
{
    $array = array();
    $arrayObject = is_object($object) ? get_object_vars($object) : $object;
    foreach ($arrayObject as $key => $value) 
    {
        $value       = (is_array($value) || is_object($value)) ? self::objToArr($value) : $value;
        $array[$key] = $value;
    }
    return $array;
}

它们将接受一个对象数组,按字母顺序将其排序为关联数组,并将其作为对象数组返回。

我不是很清楚你在这里要做什么(按每个对象内的名称对对象属性进行排序)。当你谈到污染全局空间时,我假设你指的是dsort的实现,它可以包含在类中,使用这个方法:

protected static function dsort(&$array) 
{
    foreach ($array AS &$current) 
    {
        if (is_array($current)) dsort($current);
    }
    ksort($array);
}
然后在需要时用 调用

(在用类名替换classname之后)

$dsort = array("classname", "dsort");
$dsort($array);

或者

call_user_func(array("classname","dsort"), $array);