在函数
中放置字符串替换代码时出现未定义的变量错误 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;
?>
答案 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;
...