我正在尝试通过公共属性对对象数组进行排序,但是我不能让我的$ 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;
}
任何建议表示赞赏。 感谢。
答案 0 :(得分: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;
}
答案 1 :(得分:-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);
}
}