Функция MAYBE_UNSERIALIZE() в WordPress: восстановление данных из серийного формата

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *