意外的T_FUNCTION?

时间:2013-04-15 12:34:39

标签: php

我在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的替代方案?

谢谢

4 个答案:

答案 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)
   {
     ....
   }

}