我继承了一些非常难看的代码。名为print_r
的变量上的$this->pizza_topping_list
返回以下内容(我除了两个“子对象”之外的所有内容都被删除了,但实际上大约有70个。
error_log(print_r($this->pizza_topping_list, 1));
[18-Feb-2014 11:46:52] MenuPizzaToppingList Object
(
[b_index:MenuPizzaToppingList:private] => Array
(
[@] => 36
[A] => 21
[B] => 4
)
[menu_pizza_toppings:MenuPizzaToppingList:private] => Array
(
[0] => MenuPizzaTopping Object
(
[code:MenuPizzaTopping:private] => P
[short_description:MenuPizzaTopping:private] => Pepperoni
[category:MenuPizzaTopping:private] => M
)
[1] => MenuPizzaTopping Object
(
[code:MenuPizzaTopping:private] => B
[short_description:MenuPizzaTopping:private] => Barbecue
[category:MenuPizzaTopping:private] => S
)
)
)
如果我要遍历这个(即foreach($pizzatoppings as $topping)
,我将如何访问category
对象的menu_pizza_toppings
属性?我需要一种方法来过滤掉所有类别的项目S.
我尝试了以下内容:
foreach($this->pizza_topping_list['menu_pizza_toppings'] as $tmpTopping) {
error_log("category: " . $tmpTopping['category']);
}
但是得到一个致命的错误“不能使用MenuPizzaToppingList类型的对象作为数组”。
答案 0 :(得分:0)
您需要调用$ tmpTopping->类别或可能调用$ tmpTopping-> getCategory(),具体取决于封装。你有对象类的代码吗?
答案 1 :(得分:0)
如果你没有获取menu_pizza_toppings成员的获取者......
试试这个:http://www.php.net/manual/en/reflectionclass.getproperties.php 它是关于在类中进行反射并迭代成员,即使它们是私有的。
补充:http://www.php.net/manual/en/class.reflectionproperty.php(访问属性属性xD,然后使用getValue()访问该值。)
$prop = new ReflectionClass($your_MPTL_instance)->getProperty('menu_pizza_toppings');
$prop->setAccessible(true);
$value = $prop->getValue($your_MPTL_instance);
答案 2 :(得分:0)
$tmpTopping
是一个实例对象MenuPizzaTopping
,但category
是在实例外无法访问的私有成员
答案 3 :(得分:0)
您应该为MenuPizzaTopping
类添加一个getter方法。
例如,您可以通过这种方式获得价值:
foreach($this->pizza_topping_list['menu_pizza_toppings'] as $tmpTopping) {
error_log("category: " . $tmpTopping->getCategory());
}