PHP函数的未定义变量问题

问题描述 投票:3回答:5

我是一个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行(代码的粗体部分)有错误,并且没有回显变量。我猜它给了我那个错误,因为我的变量没有在该函数内部定义,但我需要在函数之外定义它,所以有没有办法做到这一点?

php function variables undefined
5个回答
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;
        }
}

2
投票

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

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


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

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;
}

2
投票

在你的函数函数provera($ prom)中添加一行说明

global $pera;

2
投票

如果您的PHP版本是5.3或更高版本,则可以应用闭包。

Closures may also inherit variables from the parent scope.

use是实现闭包的php语法。

ref:Anonymous functions

    <?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);
© www.soinside.com 2019 - 2024. All rights reserved.