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.0.2

function maybe_unserialize( $data ) {
	if ( is_serialized( $data ) ) { // Не дотримується unserialize data, що не повинно бути serialized going in.
		return @ unserialize (trim ($ data));
	}

	return $data;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *