我的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变量未定义。谁能告诉我如何解决这个问题? 提前谢谢。
答案 0 :(得分:3)
有三种方法可以解决这个问题。
在我看来,这是首选解决方案,因为它避免了全局变量对函数的污染。全局变量往往会引入意想不到的副作用,并使代码的维护和重用变得更加困难。在c2 wiki
中可以找到一篇关于为什么你应该尽可能避免使用全局变量的文章(以及一些替代解决方案)。function function1($var1,$mesg) {
if (!preg_match("/^[0-9]+$/", $var1)){
Message::Error($mesg['Error1']);
}
}
对function1的调用更改为
function1($test,$msg);
与下面的效果相同,其他符号。
function function1($var1) {
global $msg;
if (!preg_match("/^[0-9]+$/", $var1)){
Message::Error($msg['Error1']);
}
}
有些消息称,此表单比使用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']);
}
}