PHP / vBulletin - 通过函数传递变量并用输出替换变量

PHP / vBulletin - Passing a variable through a function and replacing a variable with the output

我试图通过函数传递论坛标题变量,然后用输出替换标题变量。我已阅读 the documentation 并已在页面上成功回显,但是当我尝试实现我的变量时,我遇到了困难。

我在 global_start 创建了一个插件,其中包含以下功能:

function seoUrl($string) {
    //Lower case everything
    $string = strtolower($string);
    //Make alphanumeric (removes all other characters)
    $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
    //Clean up multiple dashes or whitespaces
    $string = preg_replace("/[\s-]+/", " ", $string);
    //Convert whitespaces and underscore to dash
    $string = preg_replace("/[\s_]/", "-", $string);
}

然后我在 forumbit_display 创建了另一个插件:

$san = 'seoUrl';
$san($forum[title]);
$forumname = $san($forum[title]);

然而我的变量 $forumname 没有输出任何内容。

我已经成功实现了这个瘦身版:

$forumname = strtolower(str_replace(' ', '-', $forum[title]));

我只是想获得一些帮助来克服学习函数的困难。为什么我没有看到任何输出?

您需要return修改后的字符串

function seoUrl($string) {
    //Lower case everything
    $string = strtolower($string);
    //Make alphanumeric (removes all other characters)
    $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
    //Clean up multiple dashes or whitespaces
    $string = preg_replace("/[\s-]+/", " ", $string);
    //Convert whitespaces and underscore to dash
    $string = preg_replace("/[\s_]/", "-", $string);
   return $string; 
}


备注 当您将 string 作为函数参数传递时,该值的副本将传递给您的函数。因此,在函数中所做的任何修改都不会影响函数外部的原始变量,除非您通过引用传递它。

如何获取引用:在参数前加上&

function seoUrl(&$string) {
    //Lower case everything
    $string = strtolower($string);
    //Make alphanumeric (removes all other characters)
    $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
    //Clean up multiple dashes or whitespaces
    $string = preg_replace("/[\s-]+/", " ", $string);
    //Convert whitespaces and underscore to dash
    $string = preg_replace("/[\s_]/", "-", $string);
}

现在,上面的代码无需 return 修改后的字符串即可工作。