2014-02-18 179 views
0

我已經繼承了一些非常難看的代碼。一個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),我將如何訪問menu_pizza_toppings對象的category財產我需要一種方法來篩選出與S的類別

我已經嘗試了所有的項目如下:

foreach($this->pizza_topping_list['menu_pizza_toppings'] as $tmpTopping) { 
    error_log("category: " . $tmpTopping['category']); 
} 

但得到一個致命錯誤「不能使用MenuPizzaToppingList類型的對象作爲數組」。

回答

0

外部訪問您應該添加一個getter方法到MenuPizzaTopping類的私有成員。

因此,例如,你可以得到的價值是這樣的:

foreach($this->pizza_topping_list['menu_pizza_toppings'] as $tmpTopping) { 
    error_log("category: " . $tmpTopping->getCategory()); 
} 
+0

我只是去嘗試了幾分鐘前,但我仍然得到同樣的錯誤。該錯誤引用了「MenuPizzaToppingList」類,而不是「MenuPizzaTopping」類。 – EmmyS

+1

你試圖用一個對象作爲一個數組(因爲錯誤味精說),所以而不是這個'foreach($ this-> pizza_topping_list ['menu_pizza_toppings']作爲$ tmpTopping){'嘗試像這樣:'foreach $ this-> pizza_topping_list-> menu_pizza_toppings as $ tmpTopping){'。但是這個屬性也是私有的,所以你可能必須首先修改'MenuPizzaToppingList'。 – rocknrollcanneverdie

0

您需要調用$ tmpTopping-> category或可能$ tmpTopping-> getCategory(),具體取決於封裝。你有對象類的代碼嗎?

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

$tmpTopping是一個實例對象MenuPizzaTopping,但category是不是實例