php - 未定义属性:stdClass::$Unblinking Eternity
问题描述
我正在尝试从 Steam 服务中获取我的物品列表。我有两个功能,其中 1 个:从 Steam 商店接收所有物品,2 个功能接收物品的价格、名称、图片。因此,当我尝试解析数据时,在我的一个帐户中出现错误:Undefined property: stdClass::$Unblinking Eternity
,而在我的第二个帐户中,所有解析都很好。
var_dump($items); exit;
给我看看:
object(stdClass)#547 (34183) { ["Orb of Deliverance"]=> object(stdClass)#546 (2)
{ ["price"]=> float(58.31) ["appid"]=> string(3) "570" } ["Planks of the Bogatyr"]=> object(stdClass)#54.......
和一些日志:
at HandleExceptions->handleError('8', 'Undefined property: stdClass::$Unblinking Eternity', '/var/app/Http/Controllers/InventoryController.php', '320', array('market_hash_name' => 'Unblinking Eternity', 'json' => '{"Orb of Deliverance":{"price":57.780000000000001,"appid":"570","count":427,"bprice":51.490000000000002,"bcount":11663},"Planks of the Bogatyr":{"price":0.14000000000000001,"appid":"570","count":922,"bprice":0.12,"bcount":859},"Headdress of the Ember Crane":{"price":0.16,"appid":"570","count":808,"bprice":0.14999999999999999,"bcount":218},"Sash of Divine Ascension":
错误显示在 320 行,320 行:if($items->$item_name == 'undefined'){
我的 2 个功能:
public static function getItemPrice($market_hash_name) {
try {
if(\Cache::has('prices')){
$json = \Cache::get('prices');
$items = json_decode($json);
$item_name = $market_hash_name;
if($items->$item_name == 'undefined'){
return false;
} else{
return $items->$item_name->price;
}
} else {
return false;
}
} catch(Exception $e){
return false;
}
}
public function getPriceItems()
{
$data = file_get_contents("http://steamp.ru/v2/?key=key");
if(!$data) return 'Error getting data';
$data = json_decode($data);
if(!isset($data->success)) return 'Error getting data';
if($data->success && isset($data->items)){
\Cache::put('prices', json_encode($data->items), 44640);
return 'Successfully Parsing';
} else if(isset($data->message)){
return $data->message;
}
return 'Error getting data';
}
我怎么理解,有问题stdClass
。
我的错在哪里?我该如何解决这个错误?
解决方案
在if ($items->$item_name == 'undefined') {
您指的是动态属性名称而不首先检查它是否存在。
您可以使用isset()
.
if (!isset($items->$item_name) || $items->$item_name == 'undefined') {
不过,我不知道该项目是否真的会成为字符串“未定义”,因此您可以完全取消该部分。
if (!isset($items->$item_name)) {
推荐阅读
- hbase - /etc/hosts 中 hbase 集群的主机命名
- sql-server - 使用 PowerShell 脚本复制 SQL Server 数据库
- javascript - ES6 破坏赋值
- c# - 无法解析程序集:“使用 david.britch 的 NuGet 包时的 BehaviorsLibrary
- django - 在 Django REST Framework 的管理面板中隐藏令牌表
- c# - 如何在 Odoo 中批量插入记录?
- python - 为什么我使用@classmethod 而不是普通的实例方法
- linux - sed 包括前面的 null
- python - 区分二进制编码的 Avro 和 JSON 消息
- google-maps - TypeError:map.addMarker 不是函数