首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP/Magento:可以编辑对象中的“受保护”成员吗?

PHP/Magento:可以编辑对象中的“受保护”成员吗?
EN

Stack Overflow用户
提问于 2012-07-12 05:52:14
回答 1查看 586关注 0票数 1

我对修改这个对象中的一些受保护的值很感兴趣。更具体地说,如果可能的话,我想根据method修改price。此对象是对UPS的XML运费请求的响应。我遇到的问题是,不同方法的返回率并不是我需要的。我没有提供具体的尺寸(对于任意请求,无法获得确切的数字),因此UPS接地以外的任何方法都会产生不合适的费率。注意,一种解决方案是首先在XML请求中给它一些估计的维度(我正在用这种方法进行测试),但我也想知道如何使用这个对象。

我试图简单地访问这个对象中的一些值,但它似乎受到了保护,它们不会打印到浏览器上吗?我尝试过$object->_rates[0]$object->{_rates[0]},但它们不打印任何内容。在修改这个对象中的price值时,有人能给我指出正确的方向吗?

代码语言:javascript
运行
复制
$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
            (
            )
        )
....
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-12 06:10:49

通常,受保护的属性受到保护是有原因的。有一个方法getAllRates()可以让你编辑你想要的东西。

这意味着你可能会得到这样的结果:

代码语言:javascript
运行
复制
foreach($object->getAllRates() as $rate) {
    $rate->setPrice($rate->getPrice() * 123);
}

更改价格的方法记录在Magento Documentation中。

但是,通常可以使用Reflection更改属性/方法的可见性。

例如,您可以使用以下命令:

代码语言:javascript
运行
复制
$object = new Mage_Shipping_Model_Rate_Result();
$rp = new ReflectionProperty($object, '_rates');
$rp->setAccessability(true);

但是,这通常不是你想要的方式!这不是OOP的方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11442060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档