嘿伙计我有一些严重的hacky代码继续使用嵌套函数,但由于某些原因我无法使用闭包或lambda函数使用它,我认为这样会更好,有人会帮我理解我是怎样的可以把它变成一个闭包,lambda或其他东西,以便不用不需要的BS污染我的全局范围??
这是我的两个方法
/**
* 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;
}
它们将获取一个对象数组,按字母顺序将它们按关联数组排序,并将它们作为对象数组返回。
答案 0 :(得分:1)
我对你在这里尝试做的事情不是很清楚(在每个对象中按名称排序对象属性)。当你谈到污染全局空间时我假设你指的是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);