PHP匿名函数范围问题

Dan*_*Dan 2 php anonymous-function usort

我试图通过公共属性对对象数组进行排序,但是我无法将$ property参数注册到内部函数中(我可以在外部函数中使用它).

我阅读文档的方式,听起来像参数可用,我误解了什么?

这是我有的:

public static function sortObjectsByProperty($objects, $property)  
  {     
        function compare_object($a, $b) 
        {   
            $a = $a->$property;
            $b = $b->$property;

            if ($a->$property == $b->$property)
            {
                return 0;
            }      

            return ($a->$property > $b->$property) ? +1 : -1;        
        }

        usort($objects, 'compare_object');
        return $objects;
  }
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏 谢谢.

use*_*291 7

不幸的是,这不适用于PHP.没有嵌套范围,每个函数都有自己的局部范围.除此之外,所有函数,无论它们在何处声明,都是全局函数,只能声明一次,因此如果sortObjectsByProperty将被多次调用,您将收到错误消息.

例如,在php5.3中,您可以使用lambdas来解决这个问题

function sortObjectsByProperty($objects, $property)  
{     
        $compare_object = function($a, $b) use($property)
        {   
            $a = $a->$property;
            $b = $b->$property;

            if ($a->$property == $b->$property)
            {
                return 0;
            }      

            return ($a->$property > $b->$property) ? +1 : -1;        
        };

        usort($objects, $compare_object);
        return $objects;
  }
Run Code Online (Sandbox Code Playgroud)