maybe_serialize()WP 2.0.5

Сериализует (превращает в строку) переданные данные, если нужно.

Эту функцию принято использовать в WordPress когда заранее не известно передается сериализованная или простая строка.

Функция сериализует только массивы, объекты и, для обратной совместимости, уже сериализованную строку. Все остальное, например, простая строка, будет возвращено без изменений.

Сериализованная строка будет сериализована повторно.

$data = 'a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}';
echo maybe_serialize( $data );
// s:50:"a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}";

Функцию можно использовать на раннем этапе загрузки WordPress, еще до определения константы SHORTINIT.

maybe_unserialize() — обратная функция - десериализует переданное значение, если нужно.

Работает на основе: is_serialized()
1 раз — 0.000003 сек (скорость света) | 50000 раз — 0.03 сек (скорость света) | PHP 7.4.25, WP 5.8.2

Хуков нет.

Возвращает

Разное. Сериализованные данные.

Использование

maybe_serialize( $data );
$data(строка/массив/объект) (обязательный)
Значение, которое нужно проверить и сериализовать в случае необходимости.

Примеры

0

#1 Пример, что делает функцию с разными значениями

// Строка вернется нетронутой.
echo maybe_serialize( 'Привет мир!' ); // Привет мир!

// Числа (в том числе float), логические true/false/null, вернется нетронутыми.
echo maybe_serialize( 55 );    // 55
echo maybe_serialize( 4.560 ); // 4.560

var_dump(  maybe_serialize( true )  ); // true
var_dump(  maybe_serialize( null )  ); // null

// Массив или объект вернется сериализованной строкой.
echo maybe_serialize( [ 1 => 'Привет мир!', 'foo' => 'bar' ] );
// a:2:{i:1;s:12:"Привет мир!";s:3:"foo";s:3:"bar";}

// Сериализованная строка будет сериализована повторно.
echo maybe_serialize( 'a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}' );
// s:50:"a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}";

Список изменений

С версии 2.0.5 Введена.

Код maybe_serialize() WP 6.4.3

function maybe_serialize( $data ) {
	if ( is_array( $data ) || is_object( $data ) ) {
		return serialize( $data );
	}

	/*
	 * Double serialization is required for backward compatibility.
	 * See https://core.trac.wordpress.org/ticket/12930
	 * Also the world will end. See WP 3.6.1.
	 */
	if ( is_serialized( $data, false ) ) {
		return serialize( $data );
	}

	return $data;
}