2012-07-23 32 views
0

我的數組,其中包含對象,這在他們的對象,例如代碼:PHP:如何遍歷一個類的所有對象?

<?php 
class person { 
    public $name; 
    public $foods=array(); 
} 
class food { 
    public $foodnames=array() ; 
} 
$peoplearray[$name] = new person; 
$peoplearray[$name]->name = 'john' ; 
$peoplearray[$name]->foods[$key] = new food; 
$peoplearray[$name]->foods[$key]->foodnames[$key] = 'ice cream' ; 
$peoplearray[$name]->foods[$key] = new food; 
$peoplearray[$name]->foods[$key]->foodnames[$key] = 'banana' ; 

$peoplearray[$name] = new person; 
$peoplearray[$name]->name = 'julie' ; 
$peoplearray[$name]->foods[$key] = new food; 
$peoplearray[$name]->foods[$key]->foodnames[$key] = 'chocolate' ; 
$peoplearray[$name]->foods[$key] = new food; 
$peoplearray[$name]->foods[$key]->foodnames[$key] = 'coffee' ; 
$peoplearray[$name]->foods[$key] = new food; 
$peoplearray[$name]->foods[$key]->foodnames[$key] = 'rice' ; 
?> 

現在我需要通過類食品中的所有對象過於重複,所以我可以取回他們的屬性。任何人都知道這樣做最有效的方法?

+0

它是一個數組。 'foreach()'應該就夠了。 – uzyn 2012-07-23 14:01:30

回答

2

聲明類食品靜態屬性,把你的食物對象在其構造時間:

class food { 
    public static $collection = array(); 
    // other properties ... 

    public function __construct() { 
    // Stuff 
    self::$collection[] = $this; 
    } 
} 

// Create foo objects 
$f = new food(); 

// Iterate 
foreach(food::$collection as $foodobj) { 
    // Stuff 
} 
+0

您還應該添加'__destruct()'實現來從集合中刪除對象。我會使用'spl_object_hash($ this)'將索引編入索引,然後從集合中移除將會很簡單。 – FtDRbwLXw6 2012-07-23 14:06:27

+0

我同意,應該處理對象的破壞(也許除非在腳本關閉的時候食物不會被銷燬) – yent 2012-07-23 14:09:00