HOWTO · PHP

如何在 PHP 中建立物件陣列

本文介紹如何在 PHP 中建立物件陣列

本頁內容

PHP 陣列可以存放物件。你可以用 array() 將類別實例組成陣列、把 stdClass 實例存入數字索引,或逐一依索引將類別實例加入陣列。這三種做法中,陣列索引用來識別物件;name 和 type 等屬性則屬於物件本身。

以下範例是程式碼示意,沒有附上實際執行後擷取的輸出;執行程式碼時,可透過每個 print_r() 呼叫查看陣列及其中的物件。

在 PHP 中建立類別物件陣列

先定義類別並建立物件,再將物件傳入 array()。此例中的每個 Motorcycle 都有公開的 name 和 type 屬性。建立後的 $bikes 陣列有兩個項目,索引分別是 0 和 1。

<?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 是通用類別,可以為其實例指定屬性。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);

如果你想逐項建立陣列,例如在處理輸入資料時,可以使用這種寫法。這兩種以類別建立物件的方式,最後都會得到以數字索引指向物件的陣列;各物件的屬性仍屬於物件本身。