Функция возвращает true
или false
.
true
– если в переданном значении была сериализована именно строка (а не массив или число),false
– если переданное значение является например сериализованным массивом или не является строкой вовсе.
Может быть удобна для проверки значения на повторную сериализацию. Это когда например мы сериализуем массив – и он становится строкой, тогда функция вернёт false
, сериализуем его снова – это уже сериализованная строка и функция вернёт true
. Ну подробнее я рассмотрел этот пример ниже.
Если же вам нужно проверить, что строка является любыми сериализованными данными, то вы можете использовать функцию is_serialized().
is_serialized_string( $data )
Параметры
- $data
- Значение, которое нужно проверить.
Примеры
// начнём с обычной строки $data = serialize( 'Привет, мир!' ); $is_serialized_string = is_serialized_string( $data ); var_dump( $is_serialized_string ); // true // теперь попробуем сделать то же самое для массива $data = maybe_serialize( array( 'text' => 'Привет, мир!', 'image' => 'mountain.jpg' ) ); $is_serialized_string = is_serialized_string( $data ); var_dump( $is_serialized_string ); // false
Кстати, обратите внимание, что сначала я использовал PHP-функцию serialize()
, а потом maybe_serialize(), как думаете, почему? Да потому что maybe_serialize() проигнорирует переданную в неё обычную строку!
Пример с двойной сериализацией
Почему мы вообще сталкиваемся в WordPress с двойной сериализацией, я рассказывал здесь. Сейчас я бы хотел именно показать вам пример.
// предположим, что первоначально у нас есть массива $data = array( 'text' => 'Привет, мир!', 'image' => 'mountain.jpg' ); // мы его обрабатываем функцией maybe_serialize(); // после чего он примет вид // a:2:{s:4:"text";s:21:"Привет, мир!";s:5:"image";s:12:"mountain.jpg";} $data = maybe_serialize( $data ); // если сейчас мы проверим его функцией, то получим false if( is_serialized_string( $data ) ) { } else { // Сработает именно это условие! } // попробуем снова обработать результат функцией maybe_serialize(); // получим s:78:"a:2:{s:4:"text";s:21:"Привет, мир!";s:5:"image";s:12:"mountain.jpg";}"; $data = maybe_serialize( $data ); // а если сейчас мы проверим его функцией, то получим true if( is_serialized_string( $data ) ) { // Сработает именно это условие! } else { }
Источник: Блог Миши Рудрастых