PHP 開発では、オブジェクトと配列の間で変換する必要がよくあります。一般的なアプリケーション シナリオでは、オブジェクトを配列に変換する必要があります。 PHP には、この変換プロセスを完了するためのメソッドが多数用意されています。最も一般的に使用されるメソッドは、キャスターを介してオブジェクトを配列に変換することです。
PHP では、オブジェクトを配列に変換すると、オブジェクトの属性名が自動的にキー名として使用され、属性値がキー値として配列に格納されます。同時に、PHP はオブジェクトのプライベート、プロテクト、パブリック プロパティを選択的に変換することもできます。
例を通してオブジェクトを配列に変換する方法を学びましょう:
class BlogPost { private $title; private $content; protected $publishedAt; public function __construct($title, $content) { $this->title = $title; $this->content = $content; $this->publishedAt = date('Y-m-d H:i:s'); } } $post = new BlogPost('PHP Object Convert Array', 'PHP 中对象转换数组的实现'); $array_post = (array) $post; // 将对象转换为数组 print_r($array_post);
上の例では、3 つの属性を持つ BlogPost
クラスを定義しました: title
、content
、および publishedAt
。このうち、title
と content
はプライベート プロパティであり、publishedAt
は保護されたプロパティです。クラスのコンストラクターで、$title
プロパティと $content
プロパティを設定します。デフォルトでは、$publishedAt
プロパティは現在時刻に設定されます。
次に、BlogPost
クラスをインスタンス化し、それを配列 $array_post
にキャストします。最後に、print_r
関数を使用して、$array_post
配列の内容を出力します。出力は次のようになります。 use
型変換を実行するとき、オブジェクトの属性名にはクラス名が接頭辞として付けられます。これは、PHP では、同じ属性名は 1 回しか出現できないため、属性名の競合を防ぐために、PHP がクラス名をプレフィックスとして自動的に追加します。同時に、PHP Object Convert Array
を出力できる echo $array_post['BlogPosttitle'];
など、配列を通じてオブジェクトのプロパティにアクセスすることもできます。 オブジェクト内にプライベート プロパティと保護されたプロパティがある場合、配列に変換された後はデフォルトでアクセスできなくなることに注意してください。ただし、それらを配列に追加したい場合は、# を渡すことができます。 # #ReflectionClass
Array ( [BlogPosttitle] => PHP Object Convert Array [BlogPostcontent] => PHP 中对象转换数组的实现 [*publishedAt] => 2021-09-14 15:10:34 )
上の例では、
ReflectionClass クラスと ReflectionProperty クラスを使用して、オブジェクトのすべてのプロパティを取得しました。パブリック プロパティ、保護されたプロパティ、およびプライベート プロパティ。次に、
setAccessible() メソッドを通じてアクセスできるように属性を設定し、最後に属性と属性値を配列に追加します。出力結果は次のようになります:
class BlogPost { private $title; private $content; protected $publishedAt; public function __construct($title, $content) { $this->title = $title; $this->content = $content; $this->publishedAt = date('Y-m-d H:i:s'); } } $post = new BlogPost('PHP Object Convert Array', 'PHP 中对象转换数组的实现'); $reflection_class = new ReflectionClass($post); $properties = $reflection_class->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED | ReflectionProperty::IS_PRIVATE); // 获取所有属性 $array_post = []; foreach ($properties as $property) { $property->setAccessible(true); // 设置属性可访问 $array_post[$property->getName()] = $property->getValue($post); // 将属性及属性值添加到数组中 } print_r($array_post);
要約すると、PHP は次のようになります。オブジェクトを配列に変換する一般的な方法は、キャスト演算子
(array) を使用することです。同時に、プライベート プロパティと保護されたプロパティを配列に選択的に追加することもできます。これは、ReflectionClass クラスを通じて実現できます。どの方法を使用する場合でも、オブジェクト データの処理と受け渡しを改善するために、オブジェクトを配列に簡単に変換できます。
以上がPHPでオブジェクトを配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。