如何打印“受保护”的返回值? (PHP)

时间:2017-06-21 19:34:16

标签: php arrays google-adwords protected

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

2 个答案:

答案 0 :(得分:0)

利用ReflectionClass

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

答案 1 :(得分:0)

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

那就是the Money class can be found here

正如您所看到的那样,通过访问 public 来获取价值的方法,以便 允许(并且很可能建议)调用 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)