我在php版本5.2.7中有疑问,我得到一个错误Parse错误:语法错误,第56行/ home / ... / mainMenu.php中的意外T_FUNCTION。代码是
class MainMenu {
...
private static function toRec($arr) {
...
usort($newArr, function($a, $b) {//this was line 56
return $a['nav_order'] - $b['nav_order'];
});
...
}
...
}
什么是php 5.2的替代方案?
谢谢
答案 0 :(得分:6)
正如您所发现的,内联函数语法仅在PHP 5.3中有效。它在PHP 5.2中不可用。
另一种方法是将字符串的名称指定为字符串,然后使用该名称单独声明该函数。这在usort() manual page中记录得相当好,所以我不会在这里详细说明。
您也可以使用create_function()
。这可能是使您的PHP 5.2代码在视觉上看起来像5.3的最接近的方式,但出于多种原因,我强烈建议不要这样做。
最后,我强烈建议远离5.2升级。我知道有些情况下这很困难,但事实是PHP 5.2在两年多前被宣布为生命终结;它在那个时候没有任何安全更新,并且有一些很大的漏洞。如果你仍然坚持5.2,那么你就会越来越落后于曲线;即使5.3将在不久的将来结束,因为5.5现在很快就会到期。
答案 1 :(得分:2)
Anonymous functions仅在PHP 5.3之后可用,因此您可以声明函数并仅使用它一次(我会这样做),或者使用create_function()
:
usort($newArr, create_function( '$a, $b', 'return $a[\'nav_order\'] - $b[\'nav_order\'];'));
但是每次执行代码时都会创建函数,所以尽量不要在循环中使用它。 :)
答案 2 :(得分:0)
us usort的正确语法是
usort($a, "FUNCTION_NAME");
function FUNCTION_NAME(){
}
答案 3 :(得分:0)
您使用的是lambda / anonymous函数,PHP 5.3及更高版本支持该函数 使其适用于PHP 5.2使用如下
class MainMenu {
...
private static function toRec($arr) {
...
usort($newArr, array('MainMenu','someFunction'));
...
}
...
private static function someFunction ($a, $b)
{
....
}
}