Сериализует данные как BSON-массив или BSON-документ

# MongoDB\BSON\Serializable::bsonSerialize

(mongodb >=1.0.0)

MongoDB\BSON\Serializable::bsonSerialize — Сериализует данные как BSON-массив или BSON-документ

### Описание

abstract public function 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\Document::fromPHP(), сериализуются как BSON-документ. Для значений полей ассоциативные массивы и экземпляры класса stdClass метод сериализует как BSON-документ, а последовательные массивы — массивы с последовательными числовыми индексами, которые начинаются с `0` — как BSON-массив.

При возврате данных для корневого BSON-документа пользователям рекомендуют включать в данные возврата свойство _id. Часто идентификатор инициализируют в конструкторе при инициализации объекта MongoDB\BSON\ObjectId, который включают в данные возврата как значение идентификатора. В отсутствие свойства _id модуль сгенерирует значение MongoDB\BSON\ObjectId для операций вставки, а сервер для операций обновления или вставки.

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

Сигнатура функции не содержит параметров.

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

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

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

Версия | Описание
--- | ---
PECL-модуль mongodb 2.0.0 | Типы значений возврата, которые для методов интерфейса прежде объявили предварительными, стали обязательными.
PECL-модуль mongodb 1.17.0 | Изменили тип возврата array|object. Вместо типа object теперь возвращается тип stdClass. Классы, которые реализуют этот интерфейс, требуется изменить, чтобы методы больше не объявляли тип возврата object. Поскольку тип возврата объявляется заранее, в PHP 8.1 или более новых версиях при несовпадении типов возврата PHP выдаёт предупреждение об устаревании. В дополнение к изменениям, которые описал предыдущий параграф, теперь модуль также поддерживает возврат экземпляров классов 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'];
        }
    }

    echo MongoDB\BSON\Document::fromPHP(new MyDocument())->toRelaxedExtendedJSON(), "\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];
        }
    }

    echo MongoDB\BSON\Document::fromPHP(new MyArray())->toRelaxedExtendedJSON(), "\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];
    echo MongoDB\BSON\Document::fromPHP($value)->toRelaxedExtendedJSON(), "\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];
    echo MongoDB\BSON\Document::fromPHP($value)->toRelaxedExtendedJSON(), "\n";

    ?>

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

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

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

- MongoDB\BSON\Unserializable::bsonUnserialize() - Создаёт объект из BSON-массива или BSON-документа
- MongoDB\BSON\Persistable
- Сохранение данных

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open