WordPress как на ладони

maybe_unserialize()WP 2.0.0

Десериализует переданное значение, если оно сериализовано или возвращает оригинальное значение.

Функция проверяет переданное значение сериализовано ли оно (php функция serialize()), если - да, то к нему будет применена функция unserialize(), если - нет, то функция просто вернет начальное значение.

Противоположный аналог этой функции - maybe_serialize() - сериализует и возвращает, если передан массив/объект.

Работает на раннем этапе загрузки WordPress, еще до константы SHORTINIT.

Смотрите также кастомную функцию maybe_json_decode().

Работает на основе: is_serialized()
1 раз — 0.000047 сек (очень быстро) | 50000 раз — 1.21 сек (быстро) | PHP 7.1.2, WP 4.7.4

Хуков нет.

Возвращает

Разное. Смешанный тип: десериализованные данные, могут быть любого типа.

Использование

maybe_unserialize( $original );
$original(строка) (обязательный)
Начальные данные, которые нужно проверить и если нужно десериализовать.

Примеры

0

#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
0

#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() WP 6.5.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;
}
2 комментария
    Войти