PHP Conference Japan 2024

MongoDB\BSON\Serializable::bsonSerialize

(mongodb >=1.0.0)

MongoDB\BSON\Serializable::bsonSerialize提供一個陣列或文件以序列化為 BSON

說明

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

在物件序列化為 BSON 時呼叫。此方法必須回傳 陣列stdClassMongoDB\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

參數

此函式沒有參數。

回傳值

要序列化為 BSON 陣列或文件的 陣列stdClassMongoDB\BSON\DocumentMongoDB\BSON\PackedArray

更新日誌

版本 說明
PECL mongodb 1.17.0

回傳類型已從 陣列|物件 變更。現在回傳類型指定 stdClass,而不是 物件。實作此介面的類別必須更改,不再宣告 物件 回傳類型。由於回傳類型是暫定的,因此在 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