PHP函数的未定义变量问题

Men*_*ead 3 php variables function undefined

我是一个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);
?>
Run Code Online (Sandbox Code Playgroud)

无论如何,当我尝试这段代码时,我总是收到一条错误消息,说第11行(代码的粗体部分)有错误,并且没有回显变量.我猜它给了我那个错误,因为我的变量没有在该函数内部定义,但我需要在函数之外定义它,所以有没有办法做到这一点?

Joh*_*ker 13

这是因为您在$pera函数内部使用变量(仅存在于全局范围内).

有关更多信息,请参阅变量范围PHP手册页.

你可以通过添加global $pera;你的函数来解决这个问题,虽然这不是一个特别优雅的方法,因为全局变量因为太详细的原因而被避开.因此,最好接受$pera如下函数作为函数的参数:

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


小智 7

如果您的 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);
Run Code Online (Sandbox Code Playgroud)