PHP匿名函数作用域问题
我试图按公共属性对对象数组进行排序,但是我无法让 $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;
}
任何建议表示赞赏。 谢谢。
I'm trying to sort an array of objects by a common property, however I cannot get my $property parameter to register in the inner function (I can use it in the outer one OK).
The way I read the documentation, it sounded like the parameter would be available, have I misunderstood something?
Here is what I have:
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;
}
Any advice appreciated.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不幸的是,这在 php 中不起作用。没有嵌套作用域,每个函数都有自己的局部作用域。除此之外,所有函数,无论在何处声明,都是全局的,并且只能声明一次,因此如果多次调用 sortObjectsByProperty,您将收到错误消息。
在 php5.3 中,您可以使用 lambda 来解决这个问题,例如
Unfortunately, this won't work in php. There is no nested scope, each function has its own local scope. Besides that, all functions, no matter where they are declared, are global and can be declared only once, so you'll get an error message if sortObjectsByProperty will be called more than once.
in php5.3 you can work around this by using lambdas, for example
您不能在 PHP 中嵌入这样的函数。不过,您可以做的是使用私有静态函数:
You can't embed functions like that in PHP. What you can do, though, is make use of a private static function: