ホームページ >バックエンド開発 >PHPの問題 >PHP配列内のオブジェクトにアクセスする方法

PHP配列内のオブジェクトにアクセスする方法

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-09-28 11:17:113288ブラウズ

PHP配列内のオブジェクトにアクセスする方法

何も処理せずにオブジェクトを配列としてアクセスすると、大きなエラーがスローされます。

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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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[&#39;one&#39;]);

オブジェクトを走査する方法

実際、オブジェクトは何も処理せずに走査することもできますが、走査できるのはパブリック プロパティとして定義されている、表示されているプロパティのみです。別の定義済みインターフェイス IteratorAggregate を使用して、より制御可能なオブジェクト トラバーサルを実現できます。

rree

以上がPHP配列内のオブジェクトにアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。