2024年PHP开发者大会日本站

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期间调用。此方法必须返回一个arraystdClassMongoDB\BSON\DocumentMongoDB\BSON\PackedArray

根文档(例如,传递给MongoDB\BSON\Document::fromPHP()MongoDB\BSON\Serializable)将始终序列化为BSON文档。对于字段值,关联数组和stdClass实例将被序列化为BSON文档,而顺序数组(即顺序的,从0开始的数字索引)将被序列化为BSON数组。

建议用户在返回BSON根文档的数据时包含一个_id属性(例如,在构造函数中初始化的MongoDB\BSON\ObjectId)。如果没有_id属性,扩展或服务器将分别为插入或更新操作生成一个MongoDB\BSON\ObjectId

参数

此函数没有参数。

返回值

一个arraystdClassMongoDB\BSON\DocumentMongoDB\BSON\PackedArray,将被序列化为BSON数组或文档。

变更日志

版本 描述
PECL mongodb 1.17.0

返回类型已从array|object更改为。现在,返回类型指定了stdClass,而不是object。实现此接口的类必须更改为不再声明object返回类型。由于返回类型是暂定的,因此在PHP 8.1及更高版本上会发出弃用警告。

除了上述更改之外,扩展现在还支持返回MongoDB\BSON\DocumentMongoDB\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 条笔记

0
匿名用户
8年前
本文档似乎已过时,因为我尝试了第一个示例,它没有将objectId转换为字符串。

这似乎是更新的文档,但我不知道如何将bson转换为json

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