web-dev-qa-db-ja.com

PHPダッシュ矢印 "->"を使用して配列値を取得する

私はPHP=をかなり長い間使用していますが、高度なプログラマーではありませんでした。これは馬鹿げた質問だと思いますが、いくつかの配列値がさまざまな方法で取得できる理由を理解できませんでした。

この:

$array->value

通常ではなく:

$array['value']

標準の$ array ['value']は常に機能しますが、->メソッドを使用するものは機能しない場合があります。何故ですか?

ここに例があります。私はZend Framework 2を使用しており、->メソッドを使用してセッション値を取得できます。

$this->session->some_value

ただし、新しい通常の配列を作成することはできません。

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

Zend Framework 1ではほとんどの配列がこのようにうまく機能し、ZF2ではますますその値を取得する方法を変更する必要があるという問題に遭遇します。これは理にかなっていますか?私は確かにどんな助けにも感謝します。ありがとう、グレッグ

20
gregthegeek

他の回答で前述したように、->を使用すると、配列ではなくオブジェクトにアクセスすることになります。

ただし、オブジェクトが配列として扱われる場合があります。 ArrayAccess インターフェイスを実装しているときです。コーダーはそのようなことをすることができます例えば。 $object->fieldを呼び出すことは$object['field']と同等ですが、そうする必要はありません。

また、配列をオブジェクトとして扱うことも可能です( マニュアルを参照 を参照)。この場合、配列ではなくオブジェクトであり、上記と同じです。

20
Voitcus

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

オブジェクトについての詳細を読むことができます PHP manual のこのページ)。

2
rpkamp

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

1
Warren Sergent

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

例えば;

class MyObject{

   var $myVariable = 'test';

}

$MyObject = new MyObject();
echo $MyObject->myVariable; // Would return 'test'
1
Kevin Choppin