【发布时间】:2022-01-22 19:26:33
【问题描述】:
我是 Laravel 和 Php 的新手。我有一个简单的问题要问。
我使用 Larave 的 Http client 从另一个服务获取数据。成功得到响应后,我访问了一个属性,我们称之为foo。在 JSON 响应中,它看起来像这样:
{
"foo": "abc",
"bar": "abc123"
}
我的代码:
$response = Http::post('http://another-service.com/data', [
'user_id' => 'Steve'
]);
$responseObject = $response->throw()->object();
$value = $responseObject->foo
我可以访问来自$response 的值,例如$responseObject->foo。我这里没问题。
但我的代码分析工具 (PhpStan) 会发出警告 Access to an undefined property object::foo。我明白它为什么会抱怨,因为responseObject 只是一个object,它的属性不清楚。
我想要一个可以映射到响应 json 的自定义类,但我不想使用 Eloquent,因为 json 对象不需要映射到数据库模型。实现我需要的正确方法是什么?
我试过了:
class MyData
{
public string foo;
public string bar;
}
然后:
$responseObject = (MyData) $response->throw()->object();
但它不起作用。 (我是Java背景)
【问题讨论】:
-
在某些情况下,如果您对对象执行此操作,则必须访问未定义的属性。例如。新的 MyData($responseObject->foo, $responseObject->bar);如果您通过构造函数设置 em。为了避免出现错误,您可以将对象转换为数组,像这样访问它。这不会触发类型检查,因为数组不能这样定义。
-
但是
$responseObject->foo, $responseObject->bar已经产生了同样的错误,不管你把它传递到哪里。关于将对象隐蔽到数组,能否提供代码sn-p来说明? -
如前所述,如果您想使用对象包装到其他对象中,则无法避免出现未定义的属性错误。你用的是 larastan 吗?
-
是的。现在我改为数组(我不知道这样的选项),错误消失了。谢谢。
-
补充说希望你能接受它