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\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 更改。返回值类型不再是 object,而是指定 stdClass。实现此接口的类必须更改为不再声明 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'];
}
}

$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 ] }
添加注释

用户贡献笔记 1 个笔记

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

这似乎是更最新的文档,但我无法弄清楚如何将 bson 转换为 json

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