4

我有关于在 php 版本 5.2.7 中解决的问题,我在第 56 行收到错误 Parse error: syntax error, unexpected T_FUNCTION in /home/ ... /mainMenu.php。代码是

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 的替代方案是什么?

谢谢

4

4 回答 4

8

正如您所发现的,内联函数语法仅在 PHP 5.3 及更高版本中有效。它在 PHP 5.2 中不可用。

另一种方法是将函数的名称指定为字符串,然后使用该名称单独声明函数。这在usort() 手册页中有很好的记录,所以我不会在这里详细介绍。

您也可以使用create_function(). 这可能是让您的 PHP 5.2 代码在视觉上看起来像 5.3 的最接近的方法,但出于多种原因,我强烈建议您不要这样做。

最后,我强烈建议从 5.2 升级。我知道在某些情况下这很困难,但事实是 PHP 5.2 已在两年多前宣布终止生命。那时它没有任何安全更新,并且存在一些大漏洞。如果您仍然停留在 5.2,那么您将越来越落后于曲线;甚至 5.3 也将在不久的将来报废,因为 5.5 即将推出。

于 2013-04-15T12:48:42.917 回答
2

匿名函数仅在 PHP 5.3 之后才可用,因此您可以声明函数并只使用一次(我会这样),或者使用create_function()

usort($newArr, create_function( '$a, $b', 'return $a[\'nav_order\'] - $b[\'nav_order\'];'));

但这会在你每次执行一段代码时创建函数,所以尽量不要在循环中使用它。:)

于 2013-04-15T12:39:54.113 回答
0

美国 usort 的正确语法是

usort($a, "FUNCTION_NAME");

function FUNCTION_NAME(){
}
于 2013-04-15T12:37:07.967 回答
0

您正在使用的是 lambda/ 匿名函数,它在 PHP 5.3 及更高版本中受支持,以使其适用于 PHP 5.2,如下所示

class MainMenu {
    ...
    private static function toRec($arr) {
        ...

        usort($newArr, array('MainMenu','someFunction'));
        ...
    }
    ...
   private static function someFunction ($a, $b)
   {
     ....
   }

}
于 2013-04-15T12:41:53.093 回答