代码仅适用于PHP 5.3.6

时间:2011-06-22 18:17:36

标签: php version

  

可能重复:
  Anonymous functions pre PHP 5.3.0

我有这段代码:

$bbcode = 'Users [user=1], [user=2] and [user=3] are friendly.';
echo preg_replace_callback(
            '#\[user=(\d+)\]#',
            function($matches) {
                $userName = getUserNameByUserId($matches[1]);
                return "<a href=user.php?id=$matches[1]>$userName</a>";
            },
            $bbcode
        );

它仅适用于最后一个PHP版本。我想让它适用于PHP 5.2.17。

4 个答案:

答案 0 :(得分:4)

是的,你可以:

function callback_function($matches) {
  $userName = getUserNameByUserId($matches[1]);
  return "<a href=user.php?id=$matches[1]>$userName</a>";
}

$bbcode = 'Users [user=1], [user=2] and [user=3] are friendly.';
echo preg_replace_callback(
            '#\[user=(\d+)\]#',
            'callback_function',
            $bbcode
);

对于PHP 5.2.x,需要对函数定义略有不同,因此在调用pre_replace_callback之前定义它。然后以字符串的形式提供它的名称。

您可以在要运行代码的主机上另外升级PHP版本。 PHP 5.3比PHP 5.2快得多,甚至还没有实现。

答案 1 :(得分:0)

5.3版中引入了匿名函数,因此代码只能在5.3及更高版本中使用。

答案 2 :(得分:0)

如果你想要一个更简单的结构:

echo "Users ";
echo "<a href=\"user.php?id=1\">" . getUserNameByUserId(1) . "</a>";
echo ", ";
echo "<a href=\"user.php?id=2\">" . getUserNameByUserId(2) . "</a>";
echo " and ";
echo "<a href=\"user.php?id=3\">" . getUserNameByUserId(3) . "</a>";
echo " are friendly.";

答案 3 :(得分:0)

您可以使用preg_replace的'e'选项作为替代。

echo preg_replace('#\[user=(\d+)\]#e','"<a href=\"user.php?id=$1".getUserNameByUserId($1)."</a>"',$bbcode);