maybe_unserialize()
Десериализует переданное значение, если оно сериализовано или возвращает оригинальное значение.
Функция проверяет переданное значение сериализовано ли оно (php функция serialize()), если - да, то к нему будет применена функция unserialize(), если - нет, то функция просто вернет начальное значение.
Противоположный аналог этой функции - maybe_serialize() - сериализует и возвращает, если передан массив/объект.
Работает на раннем этапе загрузки WordPress, еще до константы SHORTINIT.
Смотрите также кастомную функцию maybe_json_decode().
Хуков нет.
Возвращает
Разное
. Смешанный тип: десериализованные данные, могут быть любого типа.
Использование
maybe_unserialize( $original );
- $original(строка) (обязательный)
- Начальные данные, которые нужно проверить и если нужно десериализовать.
Примеры
#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() в WP
В 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 6.8
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; }