我试图遍历对象并获取_dBrutto
属性的值
object(oxPrice)#428 (6) {
["_roundPrices":"oxPrice":private]=>
bool(true)
["_roundPrices":"ZmbEngine_oxPrice":private]=>
bool(true)
["_dBrutto":protected]=>
float(141.625)
["_dNetto":protected]=>
string(7) "141.625"
["_dVat":protected]=>
float(0)
["_blNetPriceMode":protected]=>
bool(true)
}
我尝试使用代码for循环:
foreach($oxPrice as $oxPrc){
var_dump($oxPrc);
}
和
foreach($oxPrice as $oxPrc => $value){
var_dump($oxPrc, $value);
}
但没有成功。
有任何建议或想法吗? 谢谢。
答案 0 :(得分:0)
_dBrutto
具有受保护的类型,这意味着它只能由自身或扩展oxPrice
类的类访问。如果您可以修改此类,请创建一个getter或将该属性设置为public(推荐getter - 公共属性已成熟以供滥用)。
/**
* @var float
*/
private $_dBrutto;
public function get_dBrutto()
{
return $this->_dBrutto();
}
然后您可以访问:$oxPrice->get_dBrutto();
如果你不能修改这个课程,那么可能是个原因。你可以强制它,但不推荐它,我只是为了测试的目的,我不想要一个setter或getter方法,但需要测试增量,ID特定值或突变。
所以我们可以使用ReflectionClass
。
$reflectionClass = new \ReflectionClass(oxPrice::class);
$reflectionProperty = $reflectionClass->getProperty('_dBrutto');
$reflectionProperty->setAccessible(true);
echo $reflectionProperty->getValue($oxPrice); // 141.625
以下是功能的示例用法:
var_dump(getProtectedProperty('_dBrutto', $oxPrice)); // 141.625
setProtectedProperty('_dBrutto', 150.666, $oxPrice);
var_dump(getProtectedProperty('_dBrutto', $oxPrice)); // 150.666
function setProtectedProperty($property, $value, $object)
{
$reflectionClass = new \ReflectionClass(get_class($object));
$reflectionProperty = $reflectionClass->getProperty($property);
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($object, $value);
}
function getProtectedProperty($property, $object)
{
$reflectionClass = new \ReflectionClass(get_class($object));
$reflectionProperty = $reflectionClass->getProperty($property);
$reflectionProperty->setAccessible(true);
$reflectionProperty->getValue($object);
}
答案 1 :(得分:-2)
您可以直接访问_dBrutto的值而无需循环。 请尝试以下。
var_dump(oxPrice->_dBrutto);