“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP答案(未定义什么意思)

您所在的位置:网站首页 r语言中$是什么意思 “注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP答案(未定义什么意思)

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP答案(未定义什么意思)

2022-12-23 08:33| 来源: 网络整理| 查看: 265

为什么会这样?

随着时间的推移,PHP 已成为一种更加注重安全性的语言。以前默认关闭的设置现在默认打开。一个完美的例子是E_STRICT,它在PHP 5.4.0 时默认开启。

此外,根据 PHP 文档,默认情况下,E_NOTICE 在文件 php.ini 中被禁用。 PHP 文档推荐turning it on for debugging purposes。然而,当我从 Ubuntu 存储库和 BitNami 的 Windows 堆栈下载 PHP 时,我看到了其他东西。

; Common Values:; E_ALL (Show all errors, warnings and notices including coding standards.); E_ALL & ~E_NOTICE (Show all errors, except for notices); E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.); E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors); Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED; Development Value: E_ALL; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT; http://php.net/error-reportingerror_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

请注意,error_reporting 实际上默认设置为生产值,而不是默认设置为“默认”值。这有点令人困惑,并且在 php.ini 之外没有记录,所以我已经 not 在其他发行版上验证了这一点。

然而,为了回答你的问题,这个错误之前没有弹出,现在弹出,因为:

您安装了 PHP,但新的默认设置记录不充分,但不排除 E_NOTICE。

E_NOTICE 诸如未定义变量和未定义索引之类的警告实际上有助于使您的代码更清晰、更安全。我可以告诉你,几年前,启用E_NOTICE 迫使我声明我的变量。它让学习 C 变得容易了很多。在 C 中,不声明变量更麻烦。

我该怎么办?

通过复制“默认值”E_ALL ; ~E_NOTICE ; ~E_STRICT ; ~E_DEPRECATED 并用 error_reporting = 中的等号后当前未注释的内容替换它来关闭 E_NOTICE。如果使用 CGI 或 FPM,请重新启动 Apache 或 PHP。确保您正在编辑“正确的”php.ini 文件。如果您使用 Apache 运行 PHP,则正确的方法是 Apache,如果运行 PHP-FPM,则为 fpm 或 php-fpm,如果运行 PHP-CGI,则为 cgi,等等。这不是推荐的方法,但如果您有遗留代码非常难以编辑,那么它可能是您***的选择。

在文件或文件夹级别关闭E_NOTICE。如果您有一些遗留代码但想要以“正确”的方式做事,这可能会更可取。为此,您应该咨询 Apache 2、Nginx 或任何您选择的服务器。在 Apache 中,您可以在 ;Directory; 中使用 php_value。

重写您的代码以使其更简洁。如果您在迁移到生产环境时需要执行此操作,或者不想让别人看到您的错误,请确保您禁用任何错误显示,并且只记录您的错误(请参阅display_errors和 log_errors 在 php.ini 和您的服务器设置中)。

扩展选项 3:这是理想的。如果你能走这条路,你应该。如果您最初不走这条路线,请考虑最终通过在开发环境中测试您的代码来移动这条路线。当您使用它时,请摆脱 ~E_STRICT 和 ~E_DEPRECATED 以查看将来可能出现的问题。您会看到很多不熟悉的错误,但它会阻止您在将来需要升级 PHP 时遇到任何不愉快的问题。

这些错误是什么意思?

Undefined variable: my_variable_name - 在使用前未定义变量时会发生这种情况。当 PHP 脚本被执行时,它在内部只是假设一个空值。但是,在哪种情况下您需要在定义变量之前对其进行检查?归根结底,这是“草率代码”的论据。作为一名开发人员,我可以告诉你,当我看到一个开源项目中的变量在其范围内被定义得尽可能高时,我可以告诉你我喜欢它。它可以更轻松地判断将来会弹出哪些变量,并更容易阅读/学习代码。

function foo(){ $my_variable_name = ''; //.... if ($my_variable_name) { // perform some logic }}

Undefined index: my_index - 当您尝试访问数组中的值但它不存在时会发生这种情况。为防止出现此错误,请执行条件检查。

// verbose way - generally betterif (isset($my_array['my_index'])) { echo "My index value is: " . $my_array['my_index'];}// non-verbose ternary example - I use this sometimes for small rules.$my_index_val = isset($my_array['my_index'])?$my_array['my_index']:'(undefined)';echo "My index value is: " . $my_index_val;

另一种选择是在函数顶部声明一个空数组。这并不总是可行的。

$my_array = array( 'my_index' => '');//...$my_array['my_index'] = 'new string';(附加提示)当我遇到这些问题和其他问题时,我使用了NetBeanss IDE(免费),它给了我很多警告和通知。其中一些提供了非常有用的提示。这不是必需的,除了大型项目外,我不再使用 IDE。这些天我更像是一个vim 的人:)。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3