我是一个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 :(得分:13)
这是因为您在函数内部使用$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;
}
}
答案 1 :(得分:2)
听起来你的$ pera变量中没有任何设置。 如果必须在函数外部定义变量,请尝试将其值作为参数传递给函数。
function echoMyVar( $myVar )
{
echo $myVar;
}
$p = "toto";
echoMyVar($p);
答案 2 :(得分:2)
你不能在方法中使用$pera
,因为它没有在方法范围内定义。
如果要使用该方法,请将其作为参数传递。
function provera($prom, $pera){ //passed as a param
if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\- \_\=\+\`[:space:]]/",$prom)){
echo "Nepravilan unos imena ili prezimina!";
echo $pera;
}
答案 3 :(得分:2)
在你的函数函数provera($ prom)中添加一行
global $pera;
答案 4 :(得分:2)
如果您的PHP版本是5.3或更高版本,则可以应用闭包。
Closures may also inherit variables from the parent scope.
use
是用于实现闭包的php语法。
<?php
// $ime=$_POST["ime"];
// $prezime=$_POST["prezime"];
$pera="string";
$prezime = "Ne radi, vrati se nazad i unesi nesto!";
// if (empty($ime)||empty($prezime)){
// echo "Ne radi, vrati se nazad i unesi nesto!";
// }
$provera = function ($prom) use ($pera) {
if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){
echo "Nepravilan unos imena ili prezimina!";
echo $pera;
}
};
// $provera($ime);
$provera($prezime);