2013-07-21 71 views
-1

我想在一个函数内创建一个全局变量,但是当我试图在函数外部回显时它不会被传递。php 5在函数内部创建全局变量

function check_input($data) 
{ 
     if (preg_match("/http/i", $data)) {$GLOBALS['spam'] = 'yes'; 
} 

check_input($data); 
echo $spam; 
echo $GLOBALS['spam']; 
+4

1.甚至不合法的PHP 2.不,你不希望创建一个全球性的 – PeeHaa

+0

岂不是$ _GLOBALS或$ _GLOBAL?也许不是,但它确实看起来像。 – pattyd

+0

另外,你还没有设置$ data – pattyd

回答

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. 

另见:Why is global state so evil?

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']; 

应该做的罚款。

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']; 

但问题是,为什么你要做到这一点,一个更好的办法是通过$垃圾邮件的功能,通过引用或归还作为一个返回变量。

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'];