【问题标题】:PHP: variable not working inside of function?PHP:变量在函数内部不起作用?
【发布时间】:2010-06-14 21:43:02
【问题描述】:
echo $path; //working
function createList($retval) {
    echo $path; //not working
    print "<form method='POST' action='' enctype='multipart/form-data'>";
    foreach ($retval as $value) {
            print "<input type='checkbox' name='deletefiles[]' id='$value' value='$value'>$value<br>";
    }
    print "<input class='submit' name='deleteBtn' type='submit' value='Datei(en) löschen'>";
    print "</form>";    
}

我做错了什么?为什么 $path 在 createList 函数之外正确打印,但在函数内部无法访问?

【问题讨论】:

  • $path 在哪里定义?是否定义为global $path

标签: php function


【解决方案1】:

因为它没有在函数中定义。

有几种方法可以解决这个问题:

1) 通过告诉函数它是一个全局变量来使用 Alex 所说的:

echo $path; // working

function createList($retval) {
  global $path;

  echo $path; // working
}

2) 将其定义为常量:

define(PATH, "/my/test/path"); // You can put this in an include file as well.
  
echo PATH; // working

function createList($retval) {
  echo PATH; // working
}

3) 如果特定于该函数,则将其传递给该函数:

echo $path; // working

function createList($retval, $path) {
  echo $path; // working
}

根据该功能的实际工作原理,其中一个就可以了。

【讨论】:

    【解决方案2】:

    如果你想让它工作,你应该在函数中使用global $path,所以它看起来在函数范围之外。

    请注意,全局变量是从地狱发送的:)。

    【讨论】:

      【解决方案3】:

      因为$path 内部createList() 和外部(在全局范围内)是两个不同的变量。阅读有关variable scope in PHP 的更多信息。

      【讨论】:

        【解决方案4】:

        您必须使用全局修饰符。

        echo $path;
        function createList($retval) {
            global path;
            echo $path; // works now :)
        

        【讨论】:

          【解决方案5】:

          作为使用全局变量的替代方案,只需将$path 传入即可。当然,如果您不需要函数内部的变量,请不要打扰!

          echo $path;
          function createList($retval, $path) {
              echo $path;
              print "<form method='POST' action='' enctype='multipart/form-data'>";
              foreach ($retval as $value) {
                      print "<input type='checkbox' name='deletefiles[]' id='$value' value='$value'>$value<br>";
              }
              print "<input class='submit' name='deleteBtn' type='submit' value='Datei(en) löschen'>";
              print "</form>";    
          }
          

          【讨论】:

            【解决方案6】:

            只需使用 $GLOBALS['your variable name'] 并在函数中的任何位置使用它

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-09
              • 1970-01-01
              • 2023-01-29
              • 1970-01-01
              • 2020-06-05
              • 1970-01-01
              相关资源
              最近更新 更多