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 ] }

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
0
Anonymous ΒΆ
10 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