何も処理せずにオブジェクトを配列としてアクセスすると、大きなエラーがスローされます。
Fatal error: Uncaught Error: Cannot use object of type Test as array
もちろん、クラスにいくつかの変更を加えた場合でも、配列のようにアクセスできます。
保護されたオブジェクトのプロパティにアクセスする方法
正式な変換の前に、別の質問を見てみましょう。保護されたプロパティにアクセスしようとすると、大きなエラーがスローされます。
Fatal error: Uncaught Error: Cannot access private property Test::$container
保護された属性は取得できないというのは本当ですか?もちろんそうではありません。保護された属性を取得したい場合は、マジック メソッド __get を使用できます。
関連する推奨事項: "php array"
DEMO1
プライベート属性の取得
<?php class Test { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function __get($name) { return property_exists($this, $name) ? $this->$name : null; } } $test = new Test(); var_dump($test->container);
# #DEMO2
private 属性で、対応するキー名のキー値を取得します。<?php class Test { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function __get($name) { return array_key_exists($name, $this->container) ? $this->container[$name] : null; } } $test = new Test(); var_dump($test->one);
オブジェクトに配列としてアクセスする方法
これを実現するには、事前定義されたインターフェイスで ArrayAccess インターフェイスを使用する必要があります。インターフェイスには実装する必要がある 4 つの抽象メソッドがあります。<?php class Test implements ArrayAccess { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetGet($offset){ return isset($this->container[$offset]) ? $this->container[$offset] : null; } public function offsetSet($offset, $value) { if(is_null($offset)){ $this->container[] = $value; }else{ $this->container[$offset] = $value; } } public function offsetUnset($offset){ unset($this->container[$offset]); } } $test = new Test(); var_dump($test['one']);
オブジェクトを走査する方法
実際、オブジェクトは何も処理せずに走査することもできますが、走査できるのはパブリック プロパティとして定義されている、表示されているプロパティのみです。別の定義済みインターフェイス IteratorAggregate を使用して、より制御可能なオブジェクト トラバーサルを実現できます。rree
以上がPHP配列内のオブジェクトにアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。