Функция 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.