Функция MAYBE_UNSERIALIZE() │ WP 2.0.0
Функция maybe_unserialize()
предназначена для того, чтобы попытаться восстановить данные, если они были сохранены в специальном формате (серийный формат), или вернуть первоначальное значение, если данные не требуют восстановления.
Что делает функция maybe_unserialize()
?
Эта функция проверяет, сохранены ли переданные данные в серийном формате:
- Если данные серийные, применяется функция
unserialize()
, которая восстанавливает их в исходный вид. - Если данные не серийные, функция просто возвращает их в том виде, в каком они были переданы.
Функция, противоположная maybe_unserialize()
, называется maybe_serialize()
, и она выполняет преобразование данных в серийный формат, если передается массив или объект.
Эта функция может использоваться на раннем этапе загрузки WordPress, даже до того, как будет определена константа SHORTINIT
.
Также стоит упомянуть о функции maybe_json_decode()
, которая выполняет похожие задачи с данными в формате JSON.
Показатели производительности:
- Использует:
is_serialized()
- Время выполнения:
- 1 раз — 0.000047 сек (очень быстро)
- 50000 раз — 1.21 сек (быстро)
- Версия PHP: 7.1.2, WordPress 4.7.4
Возвращаемое значение
Функция возвращает смешанный тип данных. Восстановленные данные могут быть любым типом.
Использование функции
maybe_unserialize( $data );
Где:
$data
(стро��а) — необходимые данные для проверки и возможного восстановления.
Примеры использования
Пример 1
$res = maybe_unserialize( 'a:1:{s:3:"foo";i:15;}' );
/*
Array (
[foo] => 15
)
*/
$res = maybe_unserialize( 'simple string' ); // возвращает: simple string
$res = maybe_unserialize( 123 ); // возвращает: 123
Пример 2: Использование maybe_unserialize()
в WordPress
В WordPress эта функция используется во многих местах, и, как правило, вам не нужно беспокоиться о том, какие данные вы передаете или получаете из базы данных. Например, когда вы сохраняете массив в произвольном поле поста с помощью функции update_post_meta()
, данные автоматически сериализуются при их сохранении и десериализуются при их получении с помощью функции get_post_meta()
. То же самое происходит при сохранении и извлечении опций с функциями add_option()
и get_option()
.
Однако в некоторых случаях, при разработке плагинов или тем, может возникнуть необходимость вручную выполнять эту проверку, и здесь вам поможет функция maybe_unserialize()
и ее аналог maybe_serialize()
.
Предположим, мы сохранили данные в базе данных в виде структурированного массива или объекта. Когда мы извлекаем эти данные, нам нужно получить их в структурированном виде. Для этого мы получаем данные и пропускаем их через функцию maybe_unserialize()
:
// $value - это строка, представляющая сериализованный объект
$value = maybe_unserialize( $value );
// Теперь $value становится реальным объектом
// Теперь мы можем использовать его: $value->some_prop
Изменения в функции
С момента её введения в WordPress 2.0.0 данная функция активно используется для работы с серийными данными.
Код функции maybe_unserialize()
function maybe_unserialize( $data ) {
if ( is_serialized( $data ) ) { // Не пытайтесь восстановить данные, которые не были сериализованы.
return @unserialize( trim( $data ) );
}
return $data;
}
Связанные функции
serialize()
is_serialized()
is_serialized_string()
maybe_serialize()
Функции-помощники, которые могут быть полезны:
__return_empty_array()
__return_empty_string()
__return_false()
__return_null()
__return_true()
__return_zero()
array_key_first()
array_key_last()
- и многие другие.
Эти функции помогут вам выполнять различные операции с массивами и строками в WordPress.