Противоположный эффект имеет функция maybe_serialize(), которая наоборот сериализует данные.
Небольшой прикол о том, как работает приставка maybe_
в функциях maybe_serialize() и maybe_unserialize()
. По логике она должна означать «делаем действие, если необходимо», однако так она работает только во второй функции maybe_unserialize()
– то есть действительно, если мы передадим в функцию сериализованную строку, то она её структурирует, если мы передадим в функцию например массив, то она ничего с ним делать не будет. Что касается функцииmaybe_serialize(), то неважно, передадим ли мы в неё массив или уже сериализованную строку, функция всё равно сериализует значение, почему так происходит, я уже рассказывал ранее.
maybe_unserialize()
встречается в функциях для получения опций и мета-полей из базы данных, например get_option(), get_post_meta()
и т.д.
maybe_unserialize( $data )
Параметры
- $data
- Данные, которые нужно обработать.
Примеры
Решил рассмотреть те же самые примеры, которые я рассматривал в функции maybe_serialize().
// Обычные несериализованные строки функция никак не обрабатывает echo maybe_unserialize( 'Привет мир!' ); // Привет мир! // Другие несериализованные данные, числа, логические, массивы, null, также никак обработаны не будут echo maybe_unserialize( 21 ); // 21 var_dump( maybe_unserialize( false ) ); // false print_r( maybe_unserialize( array( 'text' => 'Привет, мир!', 'image' => 'mountain.jpg' ) ) ); // Array ( => Привет, мир! [image] => mountain.jpg ) // Сериализованная массив будет структурирован print_r( maybe_unserialize( 'a:2:{s:4:"text";s:21:"Привет, мир!";s:5:"image";s:12:"mountain.jpg";}' ) ) // Array ( => Привет, мир! [image] => mountain.jpg ) // Повторно сериализованная строка обработается один раз echo maybe_unserialize( 's:78:"a:2:{s:4:"text";s:21:"Привет, мир!";s:5:"image";s:12:"mountain.jpg";}";' ); // a:2:{s:4:"text";s:21:"Привет, мир!";s:5:"image";s:12:"mountain.jpg";}