使用 WP_Error 类进行 WordPress 错误处理

涉及到编程时,错误无疑会潜入你的应用程序中。这些错误要么是由程序员编写的代码错误造成的,要么是由不愿意遵守应用程序或网站约束的用户造成的。

最终用户造成的错误通常比程序员的错误更严重,因为用户输入的数据或信息是不可预测的。

例如,在电子邮件表单字段中,用户可能会输入其他文本,而不是有效的电子邮件。如果网站缺乏完善的错误处理机制,用户可能会未经授权访问敏感信息。

由于用户行为无法预测,网站或应用程序可以编程拒绝用户输入的任何无效数据,并告知用户该数据无效。此过程称为错误处理。

WordPress 附带一个 WP_Error类,这使得插件和 WordPress 本身内的错误处理变得更加容易。

错误处理的重要性

错误处理对于任何应用程序而言都至关重要,它可以确保程序的顺利运行和良好的用户体验。作为一名程序员,你必须妥善处理应用程序中的错误,因为它对于识别、管理和解决应用程序执行过程中可能出现的问题至关重要。

通过适当的错误处理,它可以提高代码质量、用户体验和安全性,从而实现强大而可靠的应用程序。

以下是错误处理的一些主要好处:

更好的用户体验

错误处理在提升应用程序用户体验方面发挥着至关重要的作用。与其向用户显示原始的错误消息、空白页或技术细节,不如通过呈现用户友好的消息或提供替代操作来优雅地处理代码执行过程中发生的错误。

安全

适当的错误处理可以显著提高 PHP 应用程序的安全性。您可以隐藏详细的错误消息,只显示简短友好的错误消息,而不必担心向潜在攻击者透露应用程序内部的漏洞。

解决未知的应用程序错误

当 PHP 代码执行出现问题时,错误和异常会提供宝贵的信息。如果您已正确记录这些日志,则可以定期审核这些日志,以识别并解决用户在应用程序中执行某些特定操作时可能发生的任何关键错误。如果没有正确记录这些异常,几乎不可能识别这些未知的错误。

提高代码的整体质量

当 PHP 代码出现问题时,错误和异常会提供宝贵的信息。通过跟踪、分析和解决重复出现的问题,您可以逐步提高应用程序的稳定性和安全性。

理解WP_Error课程

首先,该类 WP_Error包含两个属性和一些方法。这些属性在类内部使用,您很可能不需要直接访问它们,因为类中提供了一些方法来访问您需要的信息。

WP_Error类属性

以下是两个类属性及其作用:

  • $errors 一个包含错误列表的数组。
  • $error_data是一个包含错误代码数据列表的数组。

在我们检查类方法之前,我想解释一下WP_Error类内部使用的三个术语:代码、消息和错误数据。

如果它们现在难以理解,请不要担心:当我们在下一节中检查代码示例时,事情会变得更加清晰。

  • 错误代码是错误的键。错误信息和错误数据都通过该键进行索引。
  • 该消息是对错误的描述。它被保存到errorsclass 属性中,其键由 code 参数指定。
  • 错误数据包含有关错误的其他数据。它保存到error_data属性中,并使用 code 参数中指定的键。

错误代码是用于识别 WordPress 中每个错误的 slug。

根据官方文件:

WordPress 中使用的错误代码不是整数,而是字符串,单词之间的空格会被下划线替换(例如:an_error_code)。WordPress 中使用的错误代码通常基于与该代码相关的错误消息。

这就是该类的属性WP_Error

WP_Error类方法

在上一节中,我们讨论了类提供的属性WP_Error。在本节中,我们将介绍WP_Error类中可用的类方法。

方法__construct

它是构造函数方法,用于初始化WP_Error对象。它接受三个参数:$code$message$data。 

方法add

你可以使用它来添加错误或将附加消息附加到现有错误。它接受三个参数:$code$message$data。 

方法add_data

它用于向给定代码的错误添加数据。基本上,它会添加有关错误的附加信息,这些信息有助于理解错误。它接受两个参数:$data$key

方法copy_errors

它用于将错误从一个WP_Error实例复制到另一个实例。它接受两个参数:$from WP_Error对象和$to WP_Error对象。

方法export_to

它用于将当前WP_Error对象中的错误导出到第一个参数中给定的对象中$error

方法 get_all_error_data

它用于获取第一个参数中给定错误代码的所有错误数据$code。它按照添加的顺序检索数据。

方法 get_error_code

它用于检索WP_Error对象中第一个错误的错误代码。

方法 get_error_codes

它用于返回包含WP_Error对象中存在的所有错误代码的数组。

方法 get_error_data

它用于检索与WP_Error对象中的第一个错误相关的附加数据。

方法 get_error_message

它用于检索WP_Error对象中第一个错误的错误消息。如果在第一个参数中传递了$code,它将返回给定错误代码的第一个可用消息。

方法 get_error_messages

它返回一个包含对象中所有错误消息的数组WP_Error。如果在第一个参数中传递了$code,它将返回给定错误代码的错误消息。

方法has_errors

它用于检查WP_Error对象是否有任何错误。

方法merge_from

它用于将WP_Error第一个参数中给出的对象的错误合并到当前WP_Error对象。

方法remove

它用于删除与给定错误代码相关的所有错误消息,以及该代码的任何其他错误数据。

课程如何WP_Error进行

要使用WP_Error该类进行错误处理,首先需要实例化该类。然后,就可以使用类方法来操作该WP_Error对象了。

如何向WP_Error对象添加数据

让我们看看如何初始化WP_Error对象。

$my_error = new WP_Error( 'toy', 'my favorite toy is dolly' );

$my_error通过检查物体的结构print_r()可以发现:

WP_Error Object
(
[errors] => Array
(
[toy] => Array
(
[0] => my favorite toy is dolly
)
)
[error_data] => Array
(
)
)

您会注意到,我们定义的错误存储在errors类属性中,而该error_data属性还没有数据。

创建对象时传递第三个参数来WP_Error填充$data属性,其中$code(第一个参数)是数组键,第三个参数$data是数组值。

<?php
$my_error = new WP_Error( 'toy', 'my favorite toy is dolly', 'my best' );
print_r( $my_error );
?>

现在,让我们检查一下该对象的结构WP_Error

WP_Error Object
(
[errors] => Array
(
[toy] => Array
(
[0] => my favorite toy is dolly
)
)
[error_data] => Array
(
[toy] => my best
)
)

要向错误列表添加或附加更多错误消息,我们使用接受、和作为参数的add方法。$code$message$data

<?php
$my_error = new WP_Error( 'toy', 'my favorite toy is dolly', 'best toy' );
$my_error->add( 'game', 'my favorite game console is PS4' );
?>

将第三个参数(混合数据类型)传递给add方法会将数据添加到错误代码中。

<?php
$my_error->add( 'game', 'my favorite game console is PS4', 'best game' );
?>

再次使用print_r(),让我们查看对象的结构和信息$my_error WP_Error

WP_Error Object
(
[errors] => Array
(
[toy] => Array
(
[0] => my favorite toy is dolly
)
[game] => Array
(
[0] => my favorite game console is PS4
)
)
[error_data] => Array
(
[toy] => best toy
[game] => best game
)
)

add_data()方法用于为给定的错误代码添加数据。

$my_error->add_data( 'my best teacher is Uncle Sam', 'teacher' );

到目前为止,我们已经学习了如何实例化WP_Error对象并使用各种方法添加错误消息和数据。在下一节中,我们将学习如何检索错误消息、代码和数据。

如何从WP_Error对象中检索数据

您可以使用该get_error_codes()方法返回所有错误代码的数组。

print_r( $my_error->get_error_codes() );
/* 
Output:

Array 
( 
[0] => toy 
[1] => game 
) 
*/

另一方面,该get_error_code()方法仅返回第一个错误代码。

print_r( $my_error->get_error_code() ); 
// Output: toy

当参数不存在时,该get_error_messages()方法将检索所有错误消息,但当传递参数时,它将返回与其匹配的错误消息。code$code

print_r( $my_error->get_error_messages() );
/* Output: 
Array 
( 
[0] => my favorite toy is dolly 
[1] => my favorite game console is PS4 
) 
*/

当你传递第一个参数时,它看起来像这样:

print_r( $my_error->get_error_messages( 'game' ) );
/* Output: 
Array 
( 
[0] => my favorite game console is PS4 
) 
*/

返回get_error_message()与代码匹配的单个错误消息。如果$code未传递参数,则返回第一个错误消息。

print_r( $my_error->get_error_message() );
// Output: my favorite toy is dolly

返回get_error_data()第一个错误代码的数据。

print_r( $my_error->get_error_data() );
// Output: best toy

另一方面,当你传递第一个参数时:

print_r( $my_error->get_error_data( 'teacher' ) );
// Output: my best teacher is Uncle Sam

在构建 WordPress 插件时,您可能需要检查某个变量是否是WP_Error对象的实例。这时该is_wp_error()方法就派上用场了。

此外,您可能希望在处理任何操作之前确保WP_Error对象不包含任何错误消息。例如,下面的代码片段检查以确保$my_error对象不包含任何错误。

if ( 1 > count( $my_error->get_error_messages() ) ) {
echo "No error, we're good to go";
}

如何WP_Error在现实世界中使用

WP_Error在本节中,我们将探讨如何在实际场景中使用该类。

假设您有一个自定义调查表单,其中包含电子邮件、姓名等字段。我们的目标是在提交之前验证这些表单字段,并使用该类显示任何错误WP_Error

让我们检查一下下面的代码片段。

<?php 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$error = new WP_Error();
$email = $_POST['email'] ?? '';
$name = $_POST['name'] ?? '';
if (empty($email)) {
$error->add('empty','Email is required field.');
}
if (!is_email($email)) {
$error->add('invalid', 'Please enter valid email.');
}
if (empty($name)) {
$error->add('empty','Name is required field.');
}
if (count($error->get_error_codes())) {
echo '<div>Please correct the following errors.</div>';
echo '<ul>';
echo '<li>' . implode( '</li><li>', $error->get_error_messages() ) . '</li>';
echo '</ul>';
} else {
// continue with the submission data and redirect 
}
}

首先,此代码检查表单是否已使用 HTTPPOST方法提交。接下来,我们创建该类的新实例WP_Error

接下来,我们使用$_POST超全局数组检索已提交的 email 和 name 字段的值,并尝试验证它们。如果有任何错误,我们将使用add该类的方法WP_Error将错误添加到$error对象中。

$error最后,我们使用get_error_codes类的方法检查对象中是否有错误WP_Error。如果有错误,我们将使用该get_error_messages方法显示这些错误。如果没有错误,我们将继续执行后续操作,例如将记录插入数据库等等。

结论

我们刚刚学习了WP_ErrorWordPress 中的对象。我们学习了如何创建 WP_Error 对象以及如何向其中添加错误消息。这样,我们可以收集大量关于错误及其发生位置的信息,从而更轻松地修复错误。

我们了解了如何使用get_error_message()get_error_code()和等函数get_error_data()来获取有关错误的更多信息。通过学习这些函数,您可以构建更强大的 WordPress 网站,并在发生错误时更轻松地处理它们。

请记住,编码时犯错误是正常的。WP_Error帮助您了解和管理这些错误,以改进您的网站。

评论0

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录