如何打印 "Protected" return 值? (PHP)

How do I print a "Protected" return value? (PHP)

我正在使用 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?

利用ReflectionClass

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

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

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

如您所见,有一种方法可以通过访问 public 来获取值,因此您 允许的(并且很可能被推荐)调用它并且它只是 returns 值:

/**
 * @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)