maybe_unserialize()
Десеріалізує передане значення, якщо воно серіалізоване або повертає оригінальне значення.
Функція перевіряє передане значення чи серіалізоване воно (php функція serialize()), якщо – так, то до нього буде застосована функція unserialize(), якщо – ні, то функція просто поверне початкове значення.
Протилежний аналог цієї функції – maybe_serialize() – серіалізує та повертає, якщо передано масив/об’єкт.
Працює на ранньому етапі завантаження WordPress, ще до константи SHORTINIT .
Також дивіться кастомну функцію maybe_json_decode() .
is_serialized()
(дуже швидко) | 50000 разів – 1.21 сек
(швидко) |
PHP 7.1.2, WP 4.7.4
Хуків немає.
Повертає
Разное
. Змішаний тип: десеріалізовані дані можуть бути будь-якого типу.
Використання
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.0.2
function maybe_unserialize( $data ) { if ( is_serialized( $data ) ) { // Не дотримується unserialize data, що не повинно бути serialized going in. return @ unserialize (trim ($ data)); } return $data; }