2

我试图通过一个公共属性对一组对象进行排序,但是我无法让我的 $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;
  }

任何建议表示赞赏。谢谢。

4

2 回答 2

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;
  }
于 2010-04-27T15:59:57.777 回答
-1

你不能在 PHP 中嵌入这样的函数。但是,您可以做的是使用私有静态函数:

class myClass {
  private static function compare_object($a, $b) {
    // do stuff
  }
  public function sortObjectsByProperty($objects, $property) {
    $a = new a();
    $b = new b();
    self::compare_object($a, $b);
  }
}
于 2010-04-27T16:01:06.653 回答