2012-01-16 6 views
-2

編集:ありがとうございました。私はそれが個人的な笑であったことに気付かなかったので、私はそれらをプライベートからパブリックに変えました、今それはアクセス可能でなければなりません...質問はどうすれば 'backpackPosition'の価値にアクセスできますか?再度、感謝します!PHPアクセスオブジェクト値

TF2Inventory Object 
(
[fetchDate] => 123456123 
[items] => Array 
    (
     [60] => TF2Item Object 
      (
       [equipped] => Array 
        (
         [scout] => 1 
         [sniper] => 1 
         [soldier] => 1 
         [demoman] => 1 
         [medic] => 1 
         [heavy] => 1 
         [pyro] => 1 
         [spy] => 1 
        ) 

       [attributes] => Array 
        (
         [0] => stdClass Object 
          (
           [name] => custom employee number 
           [class] => set_employee_number 
           [value] => 0 
          ) 

         [1] => stdClass Object 
          (
           [name] => cannot trade 
           [class] => cannot_trade 
           [value] => 1 
          ) 

        ) 

       [backpackPosition] => 61 
       [className] => tf_wearable 
       [count] => 1 
       [defindex] => 170 
       [id] => 535518002 
       [level] => 20 
       [name] => Primeval Warrior 
       [quality] => unique 
       [slot] => misc 
       [tradeable] => 
       [type] => Badge 
      ) 

     [43] => TF2Item Object 
      (
       [equipped] => Array 
        (
         [scout] => 0 
         [sniper] => 0 
         [soldier] => 0 
         [demoman] => 0 
         [medic] => 0 
         [heavy] => 0 
         [pyro] => 0 
         [spy] => 0 
        ) 

       [attributes] => Array 
        (
         [0] => stdClass Object 
          (
           [name] => cannot trade 
           [class] => cannot_trade 
           [value] => 1 
          ) 

        ) 

       [backpackPosition] => 44 
       [className] => tf_wearable 
       [count] => 1 
       [defindex] => 471 
       [id] => 535518003 
       [level] => 50 
       [name] => Proof of Purchase 
       [quality] => unique 
       [slot] => head 
       [tradeable] => 
       [type] => Hat 
      ) 

     [42] => TF2Item Object 
      (
       [equipped] => Array 
        (
         [scout] => 1 
         [sniper] => 1 
         [soldier] => 1 
         [demoman] => 1 
         [medic] => 1 
         [heavy] => 1 
         [pyro] => 1 
         [spy] => 1 
        ) 

       [attributes] => 
       [backpackPosition] => 43 
       [className] => tf_wearable 
       [count] => 1 
       [defindex] => 278 
       [id] => 541628464 
       [level] => 31 
       [name] => Horseless Headless Horsemann's Head 
       [quality] => unique 
       [slot] => head 
       [tradeable] => 
       [type] => Hat 
      ) 

     [59] => TF2Item Object 
      (
       [equipped] => Array 
        (
         [scout] => 0 
         [sniper] => 0 
         [soldier] => 0 
         [demoman] => 0 
         [medic] => 0 
         [heavy] => 0 
         [pyro] => 0 
         [spy] => 0 
        ) 

       [attributes] => Array 
        (
         [0] => stdClass Object 
          (
           [name] => cannot trade 
           [class] => cannot_trade 
           [value] => 1 
          ) 

        ) 

       [backpackPosition] => 60 
       [className] => tf_wearable 
       [count] => 1 
       [defindex] => 115 
       [id] => 548155039 
       [level] => 10 
       [name] => Mildly Disturbing Halloween Mask 
       [quality] => unique 
       [slot] => head 
       [tradeable] => 
       [type] => Holiday Hat 
      ) 
+1

あなたはクラスの範囲外からアクセスしていますか?プライベートインスタンスバールのポイントは、他のものでは見えないということです。 –

+0

クラスのプライベートメンバーにアクセスすることはできません。それが彼らが私的である理由です。 – afuzzyllama

+0

可能な複製:http://stackoverflow.com/questions/1981878/how-would-i-access-this-object-value – cspray

答えて

2

プライベートメンバーはそれだけでプライベートです。クラスに属しているクラスのみがアクセスできます。値を取得できるようにするには、それらを保護する(したがって、親クラスと子クラスで使用できる)か、public(すべてのクラスで使用可能)にする必要があります。別のオプションは、いくつかのゲッター、

public function get_slot() { 
    return $this->slot; 
} 

のように見える機能を書いたり、

public function __get($name) { 
    return $this->$name; 
} 

詳細情報はhttp://php.net/manual/en/language.oop5.visibility.phpでドキュメントに記載されていますように見える一般的なゲッターを作るために__get()魔法の機能を使用することです

+0

ゲッターマジックメソッドを作ることは、私的/保護された変数の目的を全滅させることになります。 –

+0

必ずしもそうではありません。 __get()メソッドは返される変数をクローンすることができ、private/protected変数を効果的に読み取り専用にします。 –

0

あなたは値にアクセスするために、各オブジェクトのメソッドをアクセサが必要になります。彼らはプライベートなので、彼らが属する各クラス内でのみアクセスすることができます。

0

プライベートプロパティが表示されますオブジェクト自体の内部からアクセスすることができます。アクセスしようとすると$this->propertyName

0

この回答は、特権レベルを変更するためのアクセス権がないライブラリを使用している場合など、課された個人データの制限を回避しようとするシナリオですクラスメンバーの中には、回避策があります。オブジェクトがunserializable /直列化可能であると仮定その後、検討してください。

string(110) "O:15:"SourceProtected":3:{s:20:"?SourceProtected?foo";s:3:"one";s:6:"?*?baz";s:3:"two";s:3:"bar";s:5:"three";}" 
string(92) "O:17:"SourceUnprotected":3:{s:3:"foo";s:4:"blah";s:3:"baz";s:3:"two";s:3:"bar";s:5:"three";}" 

だから、一つの解決策は、すべての変数に権限レベルを変更し、重複するクラスを作成することです:

<?php 
class SourceProtected { 
    private $foo = 'one'; 
    protected $baz = 'two'; 
    public $bar = 'three'; 
} 

class SourceUnprotected { 
    public $foo = 'blah';  
    public $baz = 'two'; 
    public $bar = 'three'; 
} 


$protected = new SourceProtected(); 
$unprotected = new SourceUnprotected(); 
var_dump(serialize($protected), serialize($unprotected));  

を出力するようなものが見えますパブリック。その後、作業オブジェクトをシリアライズし、シリアライズされたクラスをバージョンに変換してから、単純に文字列をシリアル化して、無制限のアクセスを持つクラス型の作業オブジェクトを作成します。

明らかにconvertメソッドは足の仕事をしなければならない場所です。どのケースでも処理できる汎用パーサを構築するか、特定のユースケースの一連のstr_replacesだけでハッキーなコードを作成する必要があります。

関連する問題