2011-05-19 31 views
2

我是一个PHP新手,所以我有一个小问题函数。 我有这行代码:未定义PHP函数的变量问题

<?php 
$ime=$_POST["ime"]; 
$prezime=$_POST["prezime"]; 
$pera="string"; 
if (empty($ime)||empty($prezime)){ 
    echo "Ne radi, vrati se nazad i unesi nesto!"; 
} 
function provera($prom){ 
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){ 
     echo "Nepravilan unos imena ili prezimina!"; 
     echo $pera; 
     } 
} 
provera($ime); 
provera($prezime); 
?> 

无论如何,当我尝试这个代码,我总是得到一个错误消息说,有上线11(代码的粗体部分)错误和没有变量呼应。我猜测它给了我这个错误,因为我的变量没有在该函数内部定义,但我需要在函数外部定义它,所以有办法做到这一点?

+0

可你过去的全功能“ provera“ – 2011-05-19 12:46:02

+0

使用格式化功能,以便我们实际上可以毫无问题地看到您的代码,这使得它更容易帮助。 – 2011-05-19 12:46:19

+2

顺便提一句,您可能会从通过[PHP手册的教程](http://www.php.net/manual/en/tutorial.php)部分获得帮助,因为它涵盖了很多这类问题。 – 2011-05-19 13:09:14

回答

11

这是因为你使用的$pera变量(只存在于全球范围内)的函数里面。

有关更多信息,请参阅PHP manual page on variable scope

你可以通过在你的函数中加入global $pera;来解决这个问题,虽然这不是一个特别优雅的方法,因为全局变量因为太详细的原因而被忽略掉了。因此,这将是更好的接受$pera作为参数传递给你的函数如下:

function provera($prom, $pera){ 
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){ 
     echo "Nepravilan unos imena ili prezimina!"; 
     echo $pera; 
     } 
} 
+0

我尝试使用$ pera作为函数参数,但是现在我得到的错误是我的provera()的第二个参数缺失,$ pera未被识别。 – Mentalhead 2011-05-19 13:03:05

+1

@Mentalhead - 我的歉意 - 当你调用函数时,你需要提供变量作为参数。即:'provel($ ime,$ pera);'和'provera($ prezime,$ pera);'。希望这可以帮助。 – 2011-05-19 13:08:12

+0

非常感谢您澄清这一点。 – Mentalhead 2011-05-19 17:08:09

1

听起来你没有在你的$ pera变量中设置任何东西。 如果您必须在函数外部定义变量,请尝试将其值作为参数传递给函数。

function echoMyVar($myVar) 
{ 
    echo $myVar; 
} 


$p = "toto"; 
echoMyVar($p); 
1

您不能在方法中使用$pera,因为它没有在方法范围内定义。

如果您想使用该方法,请将其作为参数传递。

function provera($prom, $pera){ //passed as a param 
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\- \_\=\+\`[:space:]]/",$prom)){ 
     echo "Nepravilan unos imena ili prezimina!"; 
    echo $pera; 
} 
+0

之前尝试过,现在我有三个错误2x缺少第14行provera()的参数2和第11行未定义变量:pera – Mentalhead 2011-05-19 12:52:20

+1

@Mentalhead - 正如middaparka已经指出的那样,您应该使用2个参数provera ($ ime,$ pera) – martinstoeckli 2011-05-19 14:13:21

1

在你的函数功能孕酮($ PROM)添加一行说

global $pera;