我正在尝试在函数中创建一个全局变量,但是当我尝试在函数外部回显时它不会被传递。
function check_input($data)
{
if ( preg_match("/http/i", $data)) {$GLOBALS['spam'] = 'yes';
}
check_input($data);
echo $spam;
echo $GLOBALS['spam'];
答案 0 :(得分:2)
正确的行动方案是return
函数的值,而不是依赖于全局变量。
function check_input($data)
{
//Note the use of true instead of "yes".
//You can do more stuff with true/false.
if ( preg_match("/http/i", $data)) { return true; }
else { return false; }
}
$is_spam = check_input($data);
echo $is_spam; //1 or 0, because that's how true and false display in echo.
答案 1 :(得分:0)
您的代码存在的问题是语法错误:
function check_input($data)
{
if ( preg_match("/http/i", $data)) { $GLOBALS['spam'] = 'yes'; } //Note the } I've added.
}
check_input($data);
echo $spam;
echo $GLOBALS['spam'];
应该没事。
答案 2 :(得分:0)
您可以使用此
的全局关键字function check_input($data)
{
global $spam;
if ( preg_match("/http/i", $data)) $spam = 'yes';
}
$data = "http://www.example.com";
check_input($data);
echo $spam;
echo $GLOBALS['spam'];
但问题是你为什么要这样做,更好的方法是通过引用将$ spam传递给函数或将其作为返回变量返回。
function check_input($data, &$spam)
{
if ( preg_match("/http/i", $data)) $spam = 'yes';
}
$data = "http://www.example.com";
$spam = "no";
check_input($data, $spam);
echo $spam;
echo $GLOBALS['spam'];
或
function check_input($data)
{
return ( preg_match("/http/i", $data))?'yes':'no';
}
$data = "http://www.example.com";
$spam = check_input($data);
echo $spam;
echo $GLOBALS['spam'];