Carbon object 在什么时候变成 Laravel 中的字符串?

At what point does a Carbon object turn to string in Laravel?

想用 Laravel 编写类似于 Carbon 日期的转换,我意识到 Carbon 日期在传递给 front-end 或 blade 组件时会转换为字符串。

我一直在挖掘源代码,但没有成功,有人知道这是如何工作的吗?

我的理解是 __toString() 方法在碳 object 上的某个时刻被调用,但不知道在哪里。

一个例子是:


$user = User::first();
// here created_at is a Carbon instance

return response()->with(['created_at' => $user->created_at]);
//once this is on blade created_at is a string

所以经过更多的挖掘发现 json_encode() 对此负责。

因此,如果您 json_encode 一个碳对象,输出是一个字符串。在 laravel 的 ResponseFactory 中将响应转换为 JSON。

如果您想通过响应传递一个 PHP 对象,并且只想接收一个字符串而不是一个对象,您可以使用 JsonSerializable

class MyClass implements JsonSerializable
{
 public function jsonSerialize(): string
 {
   return 'something';
 }
}

$class = new MyClass()
json_encode($class) // "'something'"

希望这对以后的人有所帮助