PHP:如何遍历一个类的所有对象?

问题描述:

我的数组,其中包含对象,这在他们的对象,例如代码: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

声明类食品静态属性,把你的食物对象在其构造时间:

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