在 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
?
__toString()
实现将实例转换为字符串(Stringable 接口)。它与可序列化不同。
你可以做
public function __toString(): string
{
return json_encode($this->bsonSerialize());
}
然后做
$mediaId = new MediaUid('abcdef');
然后输出
echo $mediaUid;
或使用
(string) $mediaUid
它给你字符串
{"val":"abcdef"}