\"注意:未定义的变量\"、\"注意:未定义的索引\"、\"警告:未定义的数组键\"和\"注意:未定义的偏移量\"使用PHP答案

您所在的位置:网站首页 未定义函数或变量syms \"注意:未定义的变量\"、\"注意:未定义的索引\"、\"警告:未定义的数组键\"和\"注意:未定义的偏移量\"使用PHP答案

\"注意:未定义的变量\"、\"注意:未定义的索引\"、\"警告:未定义的数组键\"和\"注意:未定义的偏移量\"使用PHP答案

2022-12-29 14:44| 来源: 网络整理| 查看: 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, 所以我有不是在其他发行版上验证了这一点。

但是,要回答您的问题,此错误现在会在以前没有弹出时弹出,因为:

您安装了 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。

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

扩展选项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