Hinweis: „Hinweis: Undefinierte Variable', „Hinweis: Undefinierter Index', „Warnung: Undefinierter Array-Schlüssel', „Hinweis: Undefinierter Offset' mit PHP
P粉046878197
P粉046878197 2023-07-20 11:17:02
0
2
846

Ich führe ein PHP-Skript aus, erhalte jedoch ständig eine Fehlermeldung wie diese:

Hinweis: Undefinierte Variable: my_variable_name in C:wampwwwmypathindex.php in Zeile 10

Hinweis: Undefinierter Index: my_index C:wampwwwmypathindex.php in Zeile 11

Warnung: Undefinierter Array-Schlüssel „my_index“ in C:wampwwwmypathindex.php in Zeile 11

Die Zeilen 10 und 11 sehen so aus:

echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];

Was bedeuten diese Fehlermeldungen?

Warum erscheinen sie plötzlich? Ich benutze dieses Skript seit mehreren Jahren und hatte noch nie Probleme.

Wie behebe ich diese Fehler?


P粉046878197
P粉046878197

Antworte allen(2)
P粉116631591

试一下这个

// recommended solution for recent PHP versions
$user_name = $_SESSION['user_name'] ?? '';

// pre-7 PHP versions
$user_name = '';
if (!empty($_SESSION['user_name'])) {
     $user_name = $_SESSION['user_name'];
}

或者,有一个快速而简单的解决方案:

// not the best solution, but works
// in your php setting use, it helps hiding site wide notices
error_reporting(E_ALL ^ E_NOTICE);
P粉722521204

这个错误信息旨在帮助PHP程序员在访问不存在的变量(或数组元素)时发现拼写错误或错误。因此,一个优秀的程序员应该:

  1. 确保在使用变量或数组键之前,每个变量或数组键都已经定义。如果需要在函数内部使用变量,则必须将其作为参数传递给该函数。
  2. 关注此错误并进行修复,就像处理其他错误一样。它可能指示拼写错误或某个过程未返回应有的数据。
  3. 只有在程序员无法控制的罕见情况下,才可以添加代码来规避此错误。但绝不能成为一种盲目的习惯。

注意/警告:未定义的变量

尽管PHP不要求变量声明,但建议进行声明,以避免一些安全漏洞或错误,其中一个人可能会忘记给一个变量赋值,而这个变量稍后会在脚本中使用。在未声明变量的情况下,PHP会发出一个E_WARNING级别的错误。

此警告帮助程序员发现拼写错误的变量名或类似的错误(例如,在条件求值为false时将变量赋值)。此外,未初始化变量可能存在其他可能的问题。正如PHP手册中所述,

这意味着变量可能从包含的文件中获取一个值,并且这个值将被用来替代访问未初始化变量时所期望的null值,这可能导致不可预测的结果。为了避免这种情况,最好在使用之前对PHP文件中的所有变量进行初始化。

处理这个问题的方法有以下几种:

  1. 推荐的方法是在使用之前声明每个变量。这样,只有在实际犯错尝试使用不存在的变量时,才会看到这个错误,这也是出现这个错误信息的原因。

    //Initializing a variable
     $value = ""; //Initialization value; 0 for int, [] for array, etc.
     echo $value; // no error
     echo $vaule; // an error pinpoints a misspelled variable name
  • 一个特殊情况是当一个变量被定义但在函数中不可见。在PHP中,函数有自己的变量作用域,如果你需要在函数中使用外部的变量,它的值必须作为函数的参数传递进来:

    function test($param) {
        return $param + 1; 
    }
    $var = 0;
    echo test($var); // now $var's value is accessible inside through $param
  1. 使用空值合并运算符来抑制错误。但请记住,这样PHP将无法通知您使用了错误的变量名。

    // Null coalescing operator
     echo $value ?? '';

    For the ancient PHP versions (< 7.0) isset() with ternary can be used

    echo isset($value) ? $value : '';

    请注意,尽管这本质上是一种错误抑制,但仅适用于特定的错误。因此,它可能会阻止PHP通过标记未初始化的变量来帮助您。

  2. 使用@运算符来抑制错误。这里为了历史原因而保留,但严肃地说,这种情况本不应发生。

注意:强烈建议只实施第一点。

注意:未定义的索引/未定义的偏移量/警告:未定义的数组键

当您(或PHP)尝试访问数组的未定义索引时,会出现此提示/警告。

内部数组

在处理内部数组时,即在您的代码中定义的数组,应采取完全相同的态度:在使用之前初始化所有键。这样,这个错误就能够完成其预期的工作:通知程序员代码中的错误。因此,处理方法是相同的:

建议:声明数组元素:

//Initializing a variable
    $array['value'] = ""; //Initialization value; 0 for int, [] for array, etc.
    echo $array['value']; // no error
    echo $array['vaule']; // an error indicates a misspelled key

特殊情况是当某个函数返回数组或其他值(如null或false)时。在尝试访问数组元素之前,必须进行测试,例如:

$row = $stmt->fetch();
if ($row) { // the record was found and can be worked with
    echo $row['name']; 
}

外部数组

对于外部数组(如$_POST / $_GET / $_SESSION或JSON输入),情况有所不同,因为程序员无法控制这些数组的内容。因此,检查某个键是否存在,甚至为缺失的键分配默认值是合理的。

  • 当一个PHP脚本包含一个HTML表单时,很自然地,在第一次加载时没有表单内容。因此,这样的脚本应该检查是否提交了表单。

    // for POST forms check the request method
      if ($_SERVER['REQUEST_METHOD'] === 'POST') {
          // process the form
      }
      // for GET forms / links check the important field
      if (isset($_GET['search'])) {
          // process the form
      }
  • 一些HTML表单元素,比如复选框,如果未被选中,则不会发送到服务器。在这种情况下,使用空合并运算符分配默认值是合理的。

    $agreed = $_POST['terms'] ?? false;
  • 可选的查询字符串元素或cookie应该以相同的方式处理。

    $limit = $_GET['limit'] ?? 20;
      $theme = $_COOKIE['theme'] ?? 'light';

但是赋值应该在脚本的最开始进行。验证所有的输入,将其赋值给本地变量,并在代码中一直使用它们。这样,你要访问的每个变量都会有意地存在。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!