1

このオブジェクトの保護された値を変更することに興味があります。より具体的には、可能であればにprice応じて変更したいと思います。このオブジェクトは、UPS への XML 送料リクエストからの応答です。method私が抱えている問題は、さまざまな方法で返される料金が必要なものではないことです。私は特定の寸法を提供しません (恣意的な要求では正確な数値は入手できません)。そのため、UPS Ground 以外の方法では不適切な料金が発生します。解決策の 1 つは、最初に 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
            (
            )
        )
....
)
4

1 に答える 1

3

通常、保護されたプロパティは理由で保護されます。getAllRates()あなたが望むものを編集することを可能にする方法があります。

つまり、おそらく次のようなものが得られます。

foreach($object->getAllRates() as $rate) {
    $rate->setPrice($rate->getPrice() * 123);
}

価格を変更する方法は、Magentoのドキュメントに記載されています。

ただし、一般的にプロパティ/メソッドの可視性を変更することは、Reflectionを使用して可能です。

たとえば、これを使用できます。

$object = new Mage_Shipping_Model_Rate_Result();
$rp = new ReflectionProperty($object, '_rates');
$rp->setAccessability(true);

しかし、それでも、これは通常、あなたがそれをしたい方法ではありません!これはOOPの方法ではありません。

于 2012-07-11T22:10:49.220 に答える