2013-05-18 5 views
16

私はかなりの時間をPHPで使っていますが、高度なプログラマーはいませんでした。 [PHPはダッシュの矢印を使って配列の値を取得します " - >"

$array['value'] 

標準$配列:私はこれがばかな質問であるように感じるが、いくつかの配列の値が異なる方法を使用して取得することができ、なぜ理解していなかっ:

この:

$array->value 

ではなく、通常の'value']は常に動作しますが、 - >メソッドを使用するものは時々ありません。何故ですか?

例を示します。私は、Zend Frameworkの2を使用していると私は使用して、セッション値をつかむことができます - >方法:Zendので

$array = array('some_value' => 'myvalue'); 
$array['some_value']; // works!! 
$array->some_value; // does not work :(

:私は新しい、通常の配列をすれば

$this->session->some_value 

しかし、私はできませんがフレームワーク1のほとんどの配列はこのようにうまく動作しますが、ZF2ではますますその値を取得する方法を変更する必要がある問題が発生します。 これは意味がありますか?私は確かに助けを感謝します。 ありがとう、 Greg

+0

偉大な回答をいただきありがとうございます。あなたは私が探していたものについて大丈夫です。 Voitcus(下記)に私の理解を助ける鍵がありました。みんな、助けてくれてありがとう! – gregthegeek

答えて

19

前述のように、->を使用すると、配列ではなくオブジェクトにアクセスしていることを意味します。

ただし、オブジェクトが配列として扱われることがあります。それはArrayAccessインターフェイスを実装しているときです。コーダは、例えば、電話$object->field$object['field']に相当しますが、彼/彼女はしないでください。

さらに、配列をオブジェクトとして扱うこともできますが(to the manual参照)、この場合は配列ではなくオブジェクトであり、上記と同じです。

+1

これは私が思っていたもので、私が探していたものです。正確な理由はわかりません。 PHPのArrayObjectは、オブジェクトが主に配列のように見えて振る舞い、ZF 1または2を使用すると私の混乱の原因となったと思います。今私はそれを得る!わーい!あなたのコメントとリンクされたドキュメントを読んだ後、私は私の理解にも役立つこのページを見つけました。ありがとう!! [http://codingexplained.com/coding/php/zend-framework/using-sessions-in-zend-framework-2](http://codingexplained.com/coding/php/zend-framework/using-sessions) -in-zend-framework-2) – gregthegeek

2

->でプロパティを取得できる変数は、実際にはオブジェクトであり、配列ではありません。彼らは['some_key']の構文を許可しますが、それらが配列であるとは限りません。ではない。

オブジェクトの詳細については、on this page of the PHP manualを読むことができます。

1

これらは配列ではなく、objectsです。

1

これは、配列ではないため、オブジェクト変数です。

たとえば、

class MyObject{ 

    var $myVariable = 'test'; 

} 

$MyObject = new MyObject(); 
echo $MyObject->myVariable; // Would return 'test' 
関連する問題