CakeFest 2024: The Official CakePHP Conference

MongoDB\BSON\Serializable::bsonSerialize

(mongodb >=1.0.0)

MongoDB\BSON\Serializable::bsonSerializeПредоставляет массив или документ для сериализации в BSON

Описание

abstract public MongoDB\BSON\Serializable::bsonSerialize(): array|stdClass|MongoDB\BSON\Document|MongoDB\BSON\PackedArray

Вызывается во время сериализации объекта в BSON. Метод должен возвращать массив (array) или экземпляр одного из классов: stdClass, MongoDB\BSON\Document, или MongoDB\BSON\PackedArray.

Корневые документы (например, MongoDB\BSON\Serializable, переданные в MongoDB\BSON\fromPHP()) всегда будут сериализованы как документ BSON. Для значений полей ассоциативные массивы и экземпляры stdClass будут сериализованы в виде документа BSON, а последовательные массивы (например, последовательные числовые индексы, начинающиеся с 0) будут сериализованы в виде массива BSON.

Пользователям рекомендовано включать свойство _id (например, MongoDB\BSON\ObjectId, инициализированный в конструкторе) при возврате данных для корневого документа BSON; иначе драйвер или база данных должны будут сгенерировать MongoDB\BSON\ObjectId при вставке или слиянии документа, соответственно.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает массив (array) или объект одного из классов: stdClass, MongoDB\BSON\Document, или MongoDB\BSON\PackedArray, который будет сериализован как массив BSON или документ.

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

Версия Описание
PECL mongodb 1.17.0

Возвращаемый тип был изменён с array|object. Вместо object возвращаемый тип теперь определён как объект класса stdClass. Классы, которые реализуют этот интерфейс, должны быть изменены, чтобы больше не объявлять возвращаемый тип object. Поскольку возвращаемый тип предварительно объявлен, в PHP 8.1 или более новых версиях выдаётся предупреждение об устаревании.

В дополнение к ранее описанным изменениям, драйвер теперь также поддерживает возврат экземпляров классов MongoDB\BSON\Document и MongoDB\BSON\PackedArray. Пожалуйста, обратите внимание, что любые возвращённые экземпляры класса MongoDB\BSON\PackedArray автоматически преобразуются в объекты при сохранении в качестве корневых документов. Они сохраняются в виде массивов, когда указываются как значение встроенного поля.

Примеры

Пример #1 MongoDB\BSON\Serializable::bsonSerialize() возвращение ассоциативного массива для корневого документа

<?php

class MyDocument implements MongoDB\BSON\Serializable
{
private
$id;

function
__construct()
{
$this->id = new MongoDB\BSON\ObjectId;
}

function
bsonSerialize(): array
{
return [
'_id' => $this->id, 'foo' => 'bar'];
}
}

$bson = MongoDB\BSON\fromPHP(new MyDocument);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

Вывод приведённого примера будет похож на:

{ "_id" : { "$oid" : "56cccdcada14d8755a58c591" }, "foo" : "bar" }

Пример #2 Пример использования метода MongoDB\BSON\Serializable::bsonSerialize(), возвращающего ассоциативный массив для корневого документа

<?php

class MyArray implements MongoDB\BSON\Serializable
{
function
bsonSerialize(): array
{
return [
1, 2, 3];
}
}

$bson = MongoDB\BSON\fromPHP(new MyArray);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

Результат выполнения приведённого примера:

{ "0" : 1, "1" : 2, "2" : 3 }

Пример #3 MongoDB\BSON\Serializable::bsonSerialize() возвращение ассоциативного массива для поля документа

<?php

class MyDocument implements MongoDB\BSON\Serializable
{
function
bsonSerialize(): array
{
return [
'foo' => 'bar'];
}
}

$value = ['document' => new MyDocument];
$bson = MongoDB\BSON\fromPHP($value);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

Результат выполнения приведённого примера:

{ "document" : { "foo" : "bar" } }

Пример #4 MongoDB\BSON\Serializable::bsonSerialize() возвращение последовательного массива для поля документа

<?php

class MyArray implements MongoDB\BSON\Serializable
{
function
bsonSerialize(): array
{
return [
1, 2, 3];
}
}

$value = ['array' => new MyArray];
$bson = MongoDB\BSON\fromPHP($value);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

Результат выполнения приведённого примера:

{ "array" : [ 1, 2, 3 ] }

Смотрите также

add a note

User Contributed Notes 1 note

up
0
Anonymous
8 years ago
This documentation seems to be obsolete because I tried the first example and it doesn't convert the objectId to a string.

This seems to be more current documentation but I can't figure out how to get bson to json

http://mongodb.github.io/mongo-php-library/api/source-class-MongoDB.Model.BSONDocument.html#48-57
To Top