使用php函数时php未定义变量

时间:2016-09-26 13:27:55

标签: php function

在函数

中放置字符串替换代码时出现未定义的变量错误

Bellow code显示dataemail, AND $datafname未定义,但SESSION用户名是可以的,当我尝试回复此dataemail, AND $datafname时,它会显示已记录的用户电子邮件和全名

<?php
function mentioned($input_str){
    $input_str = strip_tags($input_str);
    $input_str = htmlentities($input_str);

    $wordInString = array('@user@','@email@','@fname@');
    $replaceInString = array($_SESSION['username'], $dataemail, $datafname); // the error is from here
    return str_replace($wordInString, $replaceInString, $input_str);
}
$match_user = mentioned($info_body);
?>

这个波纹管代码运行良好而没有错误,但我需要在函数中对其进行编码,以便我可以在任何地方重复使用它而无需再次编码

<?php
            $string = $info_body;
            $wordInString = array('@user@','@email@','@fname@');
            $replaceInString = array($_SESSION['username'] ,$dataemail,$datafname);
            $match_user = str_replace($wordInString, $replaceInString, $string);
echo $match_user;
?>

1 个答案:

答案 0 :(得分:1)

默认情况下,PHP函数无法访问全局变量,因此您的函数看不到两个&#34;数据&#34;变量

最好的解决方案是将它们作为参数传递:

function mentioned($input_str, $dataemail, $datafname){
    $input_str = strip_tags($input_str);
    $input_str = htmlentities($input_str);

    $wordInString = array('@user@','@email@','@fname@');
    $replaceInString = array($_SESSION['username'], $dataemail, $datafname); // the error is from here
    return str_replace($wordInString, $replaceInString, $input_str);
}
$match_user = mentioned($info_body, $dataemail, $datafname);

另一个解决方案是将它们声明为函数顶部的全局,但这会使您的代码重用性降低,维护起来更加困难,因此请谨慎使用:

function mentioned($input_str){
    global $dataemail;
    global $datafname;
    ...