2011-12-23 9 views
39

私はしばらく検索しており、簡単な質問に対する答えを見つけることができません。 PHPでオブジェクトの配列を持つことは可能ですか?など:PHPオブジェクトの配列

$ar=array();  
$ar[]=$Obj1  
$ar[]=$obj2 

何らかの理由で私はどこでも答えを見つけることができませんでした。私はそれが可能だと仮定しますが、私はただ確認する必要があります。

+4

はい可能です。 – Indranil

答えて

72

これはPHP docs上に読み取ることがあるような一般的な(とやや簡単な質問)への回答を見つける最適な場所。具体的にはobjectsをご覧ください。 stdObjectとインスタンス化されたオブジェクトを配列内に格納することができます。実際、 'hydration'というプロセスがあり、オブジェクトのメンバ変数にデータベース行の値を設定し、オブジェクトは配列(おそらく他のオブジェクトも含む)に格納され、アクセスのために呼び出しコードに戻されます。

- 編集 -

class Car 
{ 
    public $color; 
    public $type; 
} 

$myCar = new Car(); 
$myCar->color = 'red'; 
$myCar->type = 'sedan'; 

$yourCar = new Car(); 
$yourCar->color = 'blue'; 
$yourCar->type = 'suv'; 

$cars = array($myCar, $yourCar); 

foreach ($cars as $car) { 
    echo 'This car is a ' . $car->color . ' ' . $car->type . "\n"; 
} 
+4

私はPHPサイトを試してみて何も見つけられませんでした。私はMatt Zandstraの本 "PHP Objects、Patters、and Practice"の本に座っています。情報を見つけることができませんでした。 – Beamer180

+0

@EricLarsen:更新された投稿。 –

+1

Question: その配列にただ1つの 'Car'の' color'だけを出力したいとします。あなたは 'echo $ cars [0] - > color;' '最初のものを印刷し、' 'echo $ cars [1] - > color;' '2回目を印刷しますか? –

18

はい。中

$array[] = new stdClass; 
$array[] = new stdClass; 

print_r($array); 

結果:

Array 
(
    [0] => stdClass Object 
     (
     ) 

    [1] => stdClass Object 
     (
     ) 

) 
+6

私はそれをタイムアウトし、これはタイピングの時間を含めて、テストに20秒かかりました。 – ceejayoz

+0

私のクラス名はstdClassを置き換えますか?オブジェクトが既に作成されていて、それを配列に追加するだけの場合はどうなりますか?上記のメソッドでコンストラクタを使用できますか? p.s.申し訳ありませんが、私は新しいです。 – Beamer180

+3

特別なことは何もありません。あなたが好きなように配列に追加してください。これは、あなたが非常に簡単にこれらの種類のものをあなた自身からテストできることのデモンストレーションです。 – ceejayoz

6

配列はので、私はオブジェクトの配列をしたいとき、私はそれを行うのポインタを保持することができます。

$a = array(); 
$o = new Whatever_Class(); 
$a[] = &$o; 
print_r($a); 

これは、オブジェクトが参照され、アレイからアクセス可能であることを示します。

5

はい、PHPでオブジェクトの配列を持つことは可能です。

class MyObject { 
    private $property; 

    public function __construct($property) { 
    $this->Property = $property; 
    } 
} 
$ListOfObjects[] = new myObject(1); 
$ListOfObjects[] = new myObject(2); 
$ListOfObjects[] = new myObject(3); 
$ListOfObjects[] = new myObject(4); 

print "<pre>"; 
print_r($ListOfObjects); 
print "</pre>"; 
+0

配列に新しいオブジェクトを追加するたびにmyObject()のコンストラクタインデックスをインクリメントするかどうか、またはオプションであるかどうかを確認しますか?ウェブ言語でのこのOOPのすべてのものは、単にOOPSです! –

+0

@ YoustayIgoこれは例のためのものです。その結果、出力はオブジェクトを互いに区別します。好きな値をコンストラクタに置くことができます。次に、その値をオブジェクトの$ propertyプロパティに代入します。 – ADyson

関連する問題