HOWTO · PHP

PHP でオブジェクトの配列を作成する

PHP でオブジェクトの配列を作成する方法を、3 つの例で紹介します。

このページの内容

PHP の配列にはオブジェクトを格納できます。クラスのインスタンスを array() に渡す方法、stdClass のインスタンスを数値インデックスに格納する方法、配列を作成してからクラスのインスタンスをインデックスごとに追加する方法があります。どの方法でも、配列のインデックスはオブジェクトを指し、name や type などのプロパティは各オブジェクトに属します。

以下は説明用のコード例であり、実行結果を掲載したものではありません。実行すると、各 print_r() の呼び出しで配列とその中のオブジェクトを確認できます。

PHP でクラスオブジェクトの配列を作成する

クラスを定義してインスタンスを作成し、それらを array() に渡します。この例では、各 Motorcycle に name と type というパブリックプロパティがあります。作成される $bikes 配列には、インデックス 0 と 1 の 2 つの要素が入ります。

<?php
class Motorcycle
{
    public $name;
    public $type;
}

$bike1 = new Motorcycle();
$bike1->name = 'Husqvarna';
$bike1->type = 'dirt';

$bike2 = new Motorcycle();
$bike2->name = 'Goldwing';
$bike2->type = 'touring';

$bikes = array($bike1, $bike2);
print_r($bikes);

print_r() は配列のインデックスと、それぞれのオブジェクトのプロパティを表示します。name と type の値は配列直下のキーではありません。インデックス 0 と 1 にある Motorcycle オブジェクトのプロパティです。

PHP で stdClass オブジェクトの配列を作成する

PHP の stdClass は汎用クラスで、そのインスタンスにはプロパティを設定できます。インスタンスは配列ではなくオブジェクトです。各インスタンスを $bikes 配列に格納してから、そのインデックスにあるオブジェクトに name と type を設定します。

<?php
$bikes = array();

$bikes[0] = new stdClass();
$bikes[0]->name = 'Husqvarna';
$bikes[0]->type = 'dirt';

$bikes[1] = new stdClass();
$bikes[1]->name = 'Goldwing';
$bikes[1]->type = 'touring';

print_r($bikes);

ここでは $bikes[0] と $bikes[1] がオブジェクトで、name と type は各オブジェクトに割り当てられたプロパティです。名前付きクラスを定義する必要がなく、簡単なオブジェクトで十分な場合に便利です。

PHP の array() 関数を使用してオブジェクトの配列を作成する

$bikes を空の配列として初期化し、その後で Motorcycle オブジェクトを追加する方法もあります。最初の例とは作成の順序が逆です。先に配列を作り、各インデックスに新しいオブジェクトを代入してから、そのオブジェクトのプロパティを設定します。

<?php
class Motorcycle
{
    public $name;
    public $type;
}

$bikes = array();

$bikes[0] = new Motorcycle();
$bikes[0]->name = 'Husqvarna';
$bikes[0]->type = 'dirt';

$bikes[1] = new Motorcycle();
$bikes[1]->name = 'Goldwing';
$bikes[1]->type = 'touring';

print_r($bikes);

入力を処理しながら配列を組み立てる場合など、要素を 1 つずつ追加したいときにこの方法を使えます。クラスを使う 2 つの方法では、どちらも数値インデックスがオブジェクトを指す配列になります。プロパティは引き続き各オブジェクトに属します。