is_serialized_string() – функция проверяет, что в переданном значении была сериализована именно строка

Функция возвращает 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 {
 
}

Источник: Блог Миши Рудрастых

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: