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 是一个通用类,可以为其实例赋予属性。每个实例都是对象,而不是数组。先将实例存入 $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);

如果需要逐项构建数组,例如处理输入数据时,可以采用这种写法。两种基于类的方式都会得到一个数组,其中的数字索引指向对象,而属性仍属于各自的对象。