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);

입력을 처리하면서 배열 항목을 하나씩 만들어야 할 때 이 형식을 사용할 수 있습니다. 두 클래스 기반 방식 모두 숫자 인덱스가 객체를 가리키는 배열을 만듭니다. 객체의 속성은 배열 항목의 키가 아니라 각 객체에 속합니다.