【问题标题】:Accessing object element by index按索引访问对象元素
【发布时间】:2017-04-23 05:05:36
【问题描述】:

我正在使用 eBay API,它返回:

DTS\eBaySDK\Types\RepeatableType Object
(
    [data:DTS\eBaySDK\Types\RepeatableType:private] => Array
        (
            [0] => 60
        )

    [position:DTS\eBaySDK\Types\RepeatableType:private] => 0
    [class:DTS\eBaySDK\Types\RepeatableType:private] => DTS\eBaySDK\Shopping\Types\NameValueListType
    [property:DTS\eBaySDK\Types\RepeatableType:private] => Value
    [expectedType:DTS\eBaySDK\Types\RepeatableType:private] => string
)

...如果我尝试像这样访问它:

echo $ItemSpecific->Value->{0};

...我收到此错误:

注意:未定义的属性:DTS\eBaySDK\Types\RepeatableType::$0 in ...

【问题讨论】:

  • 它是一个对象中的数组,访问它 - $ItemSpecific->Value[0]; :-)
  • Array ( [0] => 60 ) 这是一个数组而不是 json

标签: php object ebay-api arrayaccess ebay-sdk


【解决方案1】:

我曾经遇到过同样的问题。问题是您要解析的信息似乎是对象的私有属性。对象的私有属性仅限于该对象。获取私有属性以调用对象中的公共函数以输出值的标准做法。可能不存在这样的函数,因此您无法解析信息。

但是,这些规则仅适用于 PHP 领域。如果您将此信息更改为静态值,则这些规则将不再适用。

<?php
function parse($obj, $start="[", $end = "]"){
    $string = json_encode($obj);
    $s = strpos($string, $start) + 1;
    $e = strpos($string, $end);
    $diff = $e - $s;
    return substr($string, $s, $diff);
}

  echo parse($ItemSpecific->Value);

现在我没有您的确切 API 结果的示例,因此您可能需要稍微更改参数,但这个总体思路应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    由于DTS\eBaySDK\Types\RepeatableType实现了ArrayAccess接口,你可以访问私有$data数组的项如下:

    foreach ($ItemSpecific as $item) {
      var_dump($item);
    }
    

    或按索引:$ItemSpecific[0]。但您更有可能需要以一种或另一种方式迭代对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 2013-09-04
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 2016-11-07
      相关资源
      最近更新 更多