Даже если вы носите S на груди, когда дело доходит до программирования, ошибки, несомненно, будут появляться в вашем приложении. Эти ошибки либо вызваны нами, программистами, в результате ошибки кода, либо пользователями, которые не желают соответствовать ограничениям приложения или веб-сайта.
Ошибки, вызванные конечными пользователями, обычно более неблагоприятны, чем ошибки программиста, поскольку введенные пользователем данные или информация непредсказуемы.
Например, в поле формы электронной почты вместо ввода действительного адреса электронной почты пользователь может ввести текст не по электронной почте. Если на веб-сайте отсутствует надежный механизм обработки ошибок, пользователь может получить несанкционированный доступ к конфиденциальной информации.
Поскольку поведение пользователей не может быть предсказано, веб-сайт или приложение могут быть запрограммированы так, что они отклонят любые недействительные данные, введенные пользователем, и сообщат пользователю, что эти данные были недействительными. Этот процесс называется обработкой ошибок.
WordPress поставляется с классом WP_Error, который делает обработку ошибок внутри плагинов и самого WordPress намного проще.
Понимание WP_Error
Класс WP_Error
состоит из двух свойств и восьми методов. Эти свойства используются внутри класса, и вам, вероятно, не понадобятся эти свойства, так как большая часть задачи, которую вы хотите выполнить, может быть выполнена с использованием методов класса.
Ниже приведены два свойства класса и что они делают.
-
$errors
is массив, содержащий список ошибок. -
$error_data
— это массив, содержащий список данных для кодов ошибок.
Прежде чем мы рассмотрим методы класса, я хотел бы объяснить эти три термина, которые используются внутри класса WP_Error
код, сообщение, данные.
Не беспокойтесь, если их трудно понять прямо сейчас, — мы проясним ситуацию, когда рассмотрим примеры кода в следующем разделе.
- Код похож на данные пары ключ / значение, такие как массив: код в этом смысле является ключом.
- Сообщение — это значение пары ключ / значение, сохраненное в свойстве класса
errors
. - Данные , как и сообщение выше, являются значением ключа (
code
), но сохраняются в свойствеerror_data
.
Теперь о методах класса и о том, что они делают:
-
__construct()
— это магический метод PHP, принимающий три аргумента — код, сообщение и данные. Передача аргумента при созданииWP_Error
классаWP_Error
устанавливает сообщение об ошибке. -
get_error_codes()
возвращает список массивов всех кодов ошибок, если они доступны. -
get_error_code()
извлекает первый код ошибки и возвращает строку, целое или пустое значение, если кодов ошибок нет. -
get_error_messages( $code )
извлекает все сообщения об ошибках, когда аргументcode
отсутствует или сообщения об ошибках, соответствующие аргументуcode
. Возвращает массив строк ошибок при успехе или пустой массив при ошибке (если используется параметр кода). -
get_error_message( $code )
получает одно сообщение об ошибке. Это получит первое доступное сообщение для кода. Если код не указан, будет использован первый доступный код. Возвращает строку ошибки. -
get_error_data( $code )
извлекает данные об ошибках для данного кода ошибки. Возвращает данные или ноль, если ошибок нет. -
add( $code, $message, $data )
добавить больше сообщений об ошибках в список сообщений об ошибках. -
add_data( $data, $code )
добавляет данные для кода ошибки. Код ошибки может содержать только один фрагмент данных об ошибках.
Как работает класс WP_Error
Чтобы использовать класс WP_Error
для обработки ошибок, сначала WP_Error
экземпляр класса, а затем используйте метод класса. Вы можете добавить сообщение об ошибке, передав code
, message
и data
на экземпляр.
1
|
$my_error = new WP_Error( ‘toy’, ‘my favorite toy is dolly’ );
|
Изучение структуры объекта $ my_error с помощью print_r()
показывает:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
WP_Error Object
(
[errors] => Array
(
[toy] => Array
(
[0] => my favorite toy is dolly
)
)
[error_data] => Array
(
)
|
Обратите внимание, что наша определенная ошибка хранится в свойстве error_data
свойство error_data
не имеет данных.
Передав третий аргумент при создании экземпляра, создайте данные с code
(первый аргумент), являющимся ключом массива, и третьим аргументом ( data
), значением массива.
1
2
3
|
<?php
$my_error = new WP_Error( ‘toy’, ‘my favorite toy is dolly’, ‘my best’ );
print_r( $my_error );
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
WP_Error Object
(
[errors] => Array
(
[toy] => Array
(
[0] => my favorite toy is dolly
)
)
[error_data] => Array
(
[toy] => my best
)
)
|
Чтобы добавить или добавить больше сообщений об ошибках в список ошибок, используется метод add
который принимает code
, message
и data
качестве аргумента метода.
1
2
3
|
<?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()
добавляет данные в код ошибки.
1
2
|
<?php
$my_error->add( ‘game’, ‘my favorite game console is PS4’, ‘best game’ );
|
Снова используя print_r()
, давайте рассмотрим структуру и информацию нашего объекта $my_error
WP_Error
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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()
также можно использовать для добавления строго данных для кода ошибки. Код ошибки может содержать только одну информацию об ошибке.
1
|
$my_error->add_data( ‘my best teacher is Uncle Sam’, ‘teacher’ );
|
Мы узнали, как создавать и добавлять сообщения об ошибках и данные в объект WP_Error
. Давайте посмотрим, как получить сообщение об ошибке, код и данные.
Использование get_error_codes()
возвращает список массивов всех кодов ошибок.
1
2
3
4
5
6
7
8
|
print_r( $my_error->get_error_codes() );
/* returns
Array
(
[0] => toy
[1] => game
)
*/
|
Пока get_error_code()
возвращает только первый код ошибки.
1
|
print_r( $my_error->get_error_code() );
|
get_error_messages()
Получите все сообщения об ошибках, когда аргумент code
отсутствует или сообщения об ошибках, соответствующие аргументу code
.
1
2
3
4
5
6
7
8
|
print_r( $my_error->get_error_messages() );
/* returns
Array
(
[0] => my favorite toy is dolly
[1] => my favorite game console is PS4
)
*/
|
1
2
3
4
5
6
7
8
9
|
print_r( $my_error->get_error_messages( ‘game’ ) );
/* returns
Array
(
[0] => my favorite game console is PS4
)
*/
|
get_error_message()
возвращает одно сообщение об ошибке, соответствующее коду. если нет кода, возвращает первое сообщение об ошибке.
1
2
|
print_r( $my_error->get_error_message() );
// my favorite toy is dolly
|
get_error_data()
возвращает данные для кода ошибки.
1
2
|
print_r( $my_error->get_error_data() );
// best toy
|
1
2
|
print_r( $my_error->get_error_data( ‘teacher’ ) );
// my best teacher is Uncle Sam
|
При создании плагина вы можете проверить, является ли переменная объектом WP_Error
. Вот где is_wp_error()
пригодится.
Кроме того, вы также можете убедиться, что объект WP_Error
не содержит никаких сообщений об ошибках перед обработкой действия. Например, фрагмент кода ниже проверяет, не содержит ли объект $my_error
ошибки. Если истина, « Нет ошибок, мы в порядке », повторяется.
1
2
3
|
if ( 1 > count( $my_error->get_error_messages() ) ) {
echo «No error, we’re good to go»;
}
|
Резюме
В этой первой части серии об обработке ошибок в WordPress с использованием WP_Error
мы взглянули на класс и объяснили, что каждый метод класса делает с примерами кода.
WP_Error
часть покажет нам практический пример использования WP_Error
для обработки ошибок при разработке плагинов. мы на самом деле будем создавать плагин контактной формы по мере продвижения.
Оставайтесь с нами — не пропустите!