php变量未检测到

时间:2013-12-06 12:58:58

标签: php function variables

我的php程序出现问题,似乎在函数中未检测到我之前声明的数组变量。这是我的代码:

$msg = array(
//Errors List
'Error1' => 'Error 1', 
'Error2' => 'Error 2'
);

//Class for outputting Messages
class Message {
    static function Info($string) { echo $string; }
    static function Error($string) { echo $string; }
}

//Functions
function function1($var1) {
    if (!preg_match("/^[0-9]+$/", $var1)){
        Message::Error($msg['Error1']);
    }

当我运行它时,例如我测试这样的程序..

$test = 'blabla';
function1($test);

它说msg变量未定义。谁能告诉我如何解决这个问题? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

有三种方法可以解决这个问题。

将所需的全局变量作为参数传递

在我看来,这是首选解决方案,因为它避免了全局变量对函数的污染。全局变量往往会引入意想不到的副作用,并使代码的维护和重用变得更加困难。在c2 wiki

中可以找到一篇关于为什么你应该尽可能避免使用全局变量的文章(以及一些替代解决方案)。
function function1($var1,$mesg) {
    if (!preg_match("/^[0-9]+$/", $var1)){
        Message::Error($mesg['Error1']);
    }
}

对function1的调用更改为

function1($test,$msg);

使用global:

与下面的效果相同,其他符号。

function function1($var1) {
    global $msg;

    if (!preg_match("/^[0-9]+$/", $var1)){
        Message::Error($msg['Error1']);
    }
}

使用$GLOBALS superglobal

有些消息称,此表单比使用global

的表单略快
function function1($var1) {
    if (!preg_match("/^[0-9]+$/", $var1)){
        Message::Error($GLOBALS['msg']['Error1']);
    }
}

答案 1 :(得分:0)

你不能在函数中使用$ msg作为局部变量。

function function1($var1) {
    global $msg;

    if (!preg_match("/^[0-9]+$/", $var1)){
        Message::Error($msg['Error1']);
    }
}