我有兴趣修改此对象中的某些受保护值。更具体地说,如果可能,我想根据price
修改method
。此对象是对UPS的XML运费率请求的响应。我遇到的问题是不同方法返回的费率不是我需要的。我没有提供具体的尺寸(任意请求的确切数字不可用),因此UPS Ground以外的任何方法都会产生不合适的速率。请注意,一个解决方案是首先在XML请求中给它一些估计的维度(我正在以这种方式进行测试),但我也想知道如何使用这个对象。
我试图简单地访问此对象中的某些值,但它似乎受到保护,它们不会打印到浏览器?我尝试了$object->_rates[0]
和$object->{_rates[0]}
,但他们没有打印任何内容。有人能指出我正确的方向修改此对象中的price
值吗?
$object =
Mage_Shipping_Model_Rate_Result Object
(
[_rates:protected] => Array
(
[0] => Mage_Shipping_Model_Rate_Result_Method Object
(
[_data:protected] => Array
(
[carrier] => ups
[carrier_title] => UPS
[method] => 03
[method_title] => UPS Ground
[cost] => 8.9
[price] => 8.9
)
[_hasDataChanges:protected] => 1
[_origData:protected] =>
[_idFieldName:protected] =>
[_isDeleted:protected] =>
[_oldFieldsMap:protected] => Array
(
)
[_syncFieldsMap:protected] => Array
(
)
)
....
)
答案 0 :(得分:3)
通常受保护的属性会受到保护。有一种方法getAllRates()
,可让您编辑所需内容。
这意味着你可能得到这样的东西:
foreach($object->getAllRates() as $rate) {
$rate->setPrice($rate->getPrice() * 123);
}
更改价格的方法记录在Magento Documentation。
中但是,Reflection可以更改一般属性/方法的可见性。
例如,你可以使用它:
$object = new Mage_Shipping_Model_Rate_Result();
$rp = new ReflectionProperty($object, '_rates');
$rp->setAccessability(true);
但是,这通常不是你想要的方式!这不是OOP方式。