maybe_unserialize() WP 2.0.0
Десериализует переданное значение, если оно сериализовано или просто возвращает переданное значение.
Функция проверяет переданное значение сериализовано ли оно (php функция serialize()), если - да, то к нему будет применена функция unserialize(), если - нет, то функция просто вернет начальное значение.
Противоположный аналог этой функции - maybe_serialize() - сериализует и возвращает, если передан массив/объект.
Работает на раннем этапе загрузки WordPress, еще до константы SHORTINIT.
Хуков нет.
Возвращает
Смешанный тип: десериализованные данные, могут быть любого типа.
Использование
maybe_unserialize( $original );
- $original(строка) (обязательный)
- Начальные данные, которые нужно проверить и если нужно десериализовать.
Примеры
#1 Демонстрация работы
В WordPress функция maybe_unserialize() применяется во многих местах и чаще всего нет необходимости заботиться о том, какие данные мы размещаем или получаем из БД. Допустим при сохранении массива в произвольное поле записи с помощью update_post_meta(), данные автоматически сериализуются при сохранении и десереализуются при получении (get_post_meta()). Тоже самое происходить при сохранении и получении опций (add_option(), get_option()).
Однако, в некоторых случаях при ризработке плагинов или тем, такую проверку нужно делать вручную и тут вам поможет функция maybe_unserialize() и её аналог maybe_serialize().
Допустим, мы сохранили в БД данные, которые являются структурированными данными: массивом/объектом. При получении этих данных они нужны в структурированном виде. Для этого получим данные и "прогоним" их через функцию maybe_unserialize():
// $value - данные в виде сериализованой строкой $value = maybe_unserialize( $value ); // $value - данные которые стали массивом/объектом // теперь мы можем получать значение - $value->foo
Список изменений
С версии 2.0.0 | Введена. |
Код maybe_unserialize() maybe unserialize WP 5.6.2
function maybe_unserialize( $data ) {
if ( is_serialized( $data ) ) { // Don't attempt to unserialize data that wasn't serialized going in.
return @unserialize( trim( $data ) );
}
return $data;
}