存储在 MonogoDB 中时将类实例转换为字符串

问题描述 投票:0回答:1

在 PHP 中,我有一些自定义类的实例(例如 MediaUid),我想将其作为字符串存储在 MongoDB 中的某个嵌套文档中。

我知道我可以使用

Serializable
类来序列化并存储为序列化对象,如下例所示,但是还有一种方法可以自动将其存储为字符串(因此在插入数据库之前无需手动转换)?

<?php

namespace Domain\Media\Models;

use MongoDB\BSON\Serializable;

class MediaUid implements Serializable
{

    public readonly string $val;

    public function __construct(string $val)
    {
        $this->val = $val;
    }

    public function __toString()
    {
        return $this->val;
    }

    public function bsonSerialize()
    {
        return ['val' => $this->val];
    }

}

换句话说,对于这个类,

bsonSerialize
被调用,因为它实现了
Serializable
,但是有没有办法让它调用例如
__toString

php mongodb bson
1个回答
0
投票

__toString()
实现将实例转换为字符串(Stringable 接口)。它与可序列化不同。

你可以做

public function __toString(): string
{
    return json_encode($this->bsonSerialize());
}

然后做

$mediaId = new MediaUid('abcdef');

然后输出

echo $mediaUid;

或使用

(string) $mediaUid

它给你字符串

{"val":"abcdef"}
© www.soinside.com 2019 - 2024. All rights reserved.