【问题标题】:How do I print a "Protected" return value? (PHP)如何打印“受保护”返回值? (PHP)
【发布时间】:2017-11-24 20:58:27
【问题描述】:

我正在使用 Google AdWords API 来获取给定关键字的每次点击费用 (CPC) 数据。当我运行这段代码时:

$averageCPC = $data[AttributeType::AVERAGE_CPC]->getValue();
print_r($averageCPC);

我看到以下内容:

Google\AdsApi\AdWords\v201702\cm\Money Object
(
    [microAmount:protected] => 754133
    [ComparableValueType:protected] => 
    [ComparableValue.Type] => Money
)

如何只打印数字 754133?

【问题讨论】:

  • 尝试将其转换为字符串
  • Google\AdsApi\AdWords\v201702\cm\Money 类可能具有获取microAmount 的方法,因为它受到保护。你不是要得到它,所以如果没有办法得到它,你一定做错了什么。 编辑:as I said, there's a method - use it instead of accessing the value directly.$averageCPC->getMicroAmount()
  • 您找到返回该值的方法并使用它。
  • 你试过$averageCPC->getMicroAmount()吗? (这只是猜测)。
  • 太好了,谢谢@h2ooooooo,$averageCPC = $averageCPC->getMicroAmount();工作。很好地找到了课程。

标签: php arrays google-ads-api protected


【解决方案1】:

只是为了不让这个问题无人回答。通常,如果一个变量受到保护,那是因为您不应该得到它(至少在不使用 可以 做其他事情而不只是返回变量值的方法的情况下 - 这提供了很大的灵活性让开发人员在不更改所有获取变量的地方的情况下添加代码,在这种情况下他们不能因为谷歌不控制你的代码)。

也就是说,the Money class can be found here

如您所见,有一种方法可以通过 public 访问来获取值,因此您允许(并且很可能建议)调用它并且它只是返回价值:

/**
 * @return int
 */
public function getMicroAmount()
{
  return $this->microAmount;
}

因此答案相当简单;调用方法。

$averageCPC = $data[AttributeType::AVERAGE_CPC]->getValue();

$microAmount = $averageCPC->getMicroAmount();

print_r($averageCPC);
var_dump($microAmount); // int(754133)

【讨论】:

    【解决方案2】:

    利用ReflectionClass

    function accessProtected($obj, $prop) {
     $reflection = new ReflectionClass($obj);
     $property = $reflection->getProperty($prop);
     $property->setAccessible(true);
     return $property->getValue($obj);
    }
    

    【讨论】:

    • 感谢您的建议,但@h2ooooooo 能够找到实际的 Money 类,并且已经有一个名为 getMicroAmount() 的函数返回值。
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 2021-10-16
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多