【问题标题】:Undefined variable problem with PHP functionPHP函数的未定义变量问题
【发布时间】:2011-08-28 20:43:11
【问题描述】:

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

【问题讨论】:

  • 你能通过整个函数“provera”
  • 使用格式化函数,这样我们就可以毫无问题地实际查看您的代码,这样更容易提供帮助。
  • 顺便说一句,您可能会从 PHP manual's tutorial 部分中受益,因为它涵盖了很多此类问题。

标签: php function variables undefined


【解决方案1】:

这是因为您在函数内部使用了 $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;
        }
}

【讨论】:

  • 我尝试使用 $pera 作为函数参数,但现在我收到了错误,即我的 provera() 的第二个参数丢失并且 $pera 身份不明。
  • @Mentalhead - 抱歉 - 当您调用函数时,您需要提供变量作为参数。即:provera($ime, $pera); 和 provera($prezime, $pera);。希望这会有所帮助。
  • 非常感谢您澄清这一点。
【解决方案2】:

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

Closures may also inherit variables from the parent scope.

use是实现闭包的php语法。

参考: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);

【讨论】:

    【解决方案3】:

    在你的函数 function provera($prom) 添加一行写着

    global $pera;

    【讨论】:

      【解决方案4】:

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

      function echoMyVar( $myVar )
      {
         echo $myVar;
      }
      
      
      $p = "toto";
      echoMyVar($p);
      

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 以前试过,现在我是三个错误 2x Missing argument 2 for provera() on line 14 and Undefined variable: pera on line 11
        • @Mentalhead - 正如 middaparka 已经指出的那样,您应该使用 2 个参数 provera($ime, $pera) 调用该函数
        猜你喜欢
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 2019-09-21
        相关资源
        最近更新 更多