Verwendung von PHPs „Achtung: undefinierte Variable', „Achtung: undefinierter Index', „Warnung: undefinierter Array-Schlüssel' und „Achtung: undefinierter Offset'
P粉851401475
2023-08-23 11:45:50
<p>Ich führe ein PHP-Skript aus und erhalte weiterhin Fehlermeldungen wie diese: </p>
<blockquote>
<p>Hinweis: Undefinierte Variable: my_variable_name in C:wampwwwmypathindex.php in Zeile 10</p>
<p>Hinweis: Undefinierter Index: my_index C:wampwwwmypathindex.php Zeile 11</p>
<p>Warnung: Der Array-Schlüssel „my_index“ ist in C:wampwwwmypathindex.php in Zeile 11 nicht definiert</p>
</blockquote>
<p>Zeilen 10 und 11 sehen so aus: </p>
<pre class="brush:php;toolbar:false;">echo "Mein Variablenwert ist: " $my_variable_name;
echo "Mein Indexwert ist: " $my_array["my_index"];</pre>
<p>Was bedeuten diese Fehlermeldungen? </p>
<p>Warum erscheinen sie plötzlich? Ich verwende dieses Skript seit Jahren und hatte nie Probleme. </p>
<p>Wie kann man sie beheben? </p>
<hr />
<blockquote>
<p><sub><strong>Dies ist eine allgemeine Referenzfrage</strong>, sodass Benutzer auf doppelte Fragen verlinken können, ohne die Frage immer wieder erklären zu müssen. Ich halte dies für notwendig, da die meisten Antworten auf diese Frage in der Praxis sehr spezifisch sind. </sub></p>
<p><sub>Verwandte Metadiskussion:</sub></p>
<ul>
<li><sub>Was soll ich bei doppelten Fragen tun? </sub></li>
<li><sub>Ist eine „Referenzfrage“ sinnvoll? </sub></li>
</ul>
</blockquote><p><br /></p>
试试这些
或者,作为一个快速但肮脏的解决方案:
关于会话的注意事项:
使用会话时,需要将
session_start();
放置在所有使用会话的文件内。http://php.net/manual/en/features.sessions .php
此错误消息旨在帮助 PHP 程序员在访问不存在的变量(或数组元素)时发现拼写错误或错误。所以一个好的程序员:
通知/警告:未定义的变量
虽然 PHP 不需要变量声明,但它确实建议这样做,以避免一些安全漏洞或错误,即人们会忘记为稍后在脚本中使用的变量赋值。 PHP 在未声明变量的情况下会发出
E_WARNING
级别的错误。此警告可帮助程序员发现拼写错误的变量名称或类似类型的错误(例如在评估为 false 的条件内为变量分配了值)。此外,未初始化的变量还可能存在其他问题。正如 PHP 手册中所述,
这意味着变量可能会从包含的文件中获取值,并且将使用该值而不是预期访问未初始化变量的
null
,这可能会导致不可预测的结果。为了避免这种情况,PHP 文件中的所有变量最好在使用之前进行初始化。处理问题的方法:
建议:在使用之前声明每个变量。这样,只有当您确实犯了错误,尝试使用不存在的变量时,您才会看到此错误 - 这正是此错误消息存在的原因。
变量已定义但在函数中不可见的特殊情况。 PHP 中的函数有自己的变量范围,如果您需要在函数中使用外部变量,其值必须作为函数的参数传递:
使用空合并运算符抑制错误。但请记住,这样 PHP 将无法通知您使用了错误的变量名称。
对于古老的 PHP 版本(
请注意,它本质上仍然是一种错误抑制,尽管只是针对一个特定错误。因此,它可能会阻止 PHP 通过标记统一变量来帮助您。
使用@运算符抑制错误。由于历史原因而离开这里,但认真地说,这是不应该发生的。
注意:强烈建议仅实现第 1 点。
注意:未定义索引/未定义偏移量/警告:未定义数组键
当您(或 PHP)尝试访问数组的未定义索引时,会出现此通知/警告。
内部数组
在处理代码中定义的内部数组时,态度应该完全相同:只需在使用前初始化所有键即可。这样,该错误将完成其预期的工作:通知程序员其代码中的错误。所以方法是相同的:
推荐:声明您的数组元素:
一种特殊情况是某些函数返回数组或其他值(例如
null
或false
)。那么在尝试访问数组元素之前就必须要进行测试,比如外部数组
对于外部数组(例如
$_POST
/$_GET
/$_SESSION
或 JSON 输入),情况有点不同,因为程序员无法控制此类数组的内容。因此,检查某些键是否存在,甚至为丢失的键分配默认值都是合理的。当 PHP 脚本包含 HTML 表单时,第一次加载时很自然地没有表单内容。因此,这样的脚本应该检查表单是否已提交
某些 HTML 表单元素(例如复选框)如果未选中,则不会发送到服务器。在这种情况下,有理由使用空合并运算符来分配默认值
可选的 QUERY STRING 元素或 cookie 应以相同的方式处理
但是分配应该在脚本的一开始就完成。 验证所有输入,将其分配给局部变量,并在代码中始终使用它们。因此,您要访问的每个变量都会故意存在。
相关: