2011-09-23 44 views
1

我有一個可用的視圖內的下面的變量:如何在面向對象的PHP中獲取數組中的項目?

$recent_posts 

它是一個數組,所以我在其上執行的foreach循環和VAR傾倒結果如下所示:

<? foreach($recent_posts as $post): ?> 

<pre><?= var_dump($post) ?></pre> 

<? endforeach ?> 

這是輸出我從vardump收到:

Array 
(
    [obj] => models\Tag Object 
     (
      [large_image:protected] => 
      [small_image:protected] => 
      [_obj_id] => 13493 
      [_validator] => 
      [_values:protected] => Array 
       (
       ) 

      [_dirty_values:protected] => Array 
       (
       ) 

      [_type:protected] => 
      [_properties:protected] => Array 
       (
       ) 

      [_is_loaded:protected] => 
      [_is_static:protected] => 
     ) 

) 

如何檢索每個帖子的值。例如,如何獲得large_image的帖子?我想這(不知道我在做什麼的挫折感),而不是意外的是沒有工作:

<?= $post->large_image ?> 

回答

3

large_imageprotected,你不能訪問protectedmembers出類(this上下文)的一面。

您有兩個選擇,請爲large_image添加getter函數或將其設置爲public

getter是暴露privateprotected構件的功能,例如

public function get_large_image(){ 
    return $this->large_image; 
} 
0

$post['obj']->large_image應該這樣做。

該屬性受到保護,所以除非您在班級中,否則您可能無法訪問。

+0

他不能訪問此成員,因爲他不在'this'上下文中 – fatnjazzy

1

由於$post->large_image是被保護屬性,則不允許訪問它的類(或派生類)的外部。我認爲可能有一個getter方法,通過它你可以檢索這個值(可能類似get_large_image())。

要確定什麼樣的方法是可用的對象,無論是查看所附的類的源代碼,或使用反射:

$refl = new ReflectionClass($post); 
var_dump($refl->getMethods()); 

如果沒有可用來獲取值的方法,我勸你不要通過公開財產(因爲我所推定的理由而被保護),或者根本不改變這個類,如果它不是你自己的,那就改變這個類。

相反,我建議,如果可能的話,您將擴展類和價值創造一個getter方法:

<?php 

class MyTag 
    extends Tag 
{ 
    // I would personally prefer camelCase: getLargeImage 
    // but this might be more in line with the signature of the original class 
    public function get_large_image() 
    { 
     return $this->large_image; 
    } 
} 

當然,這會變得棘手很快,如果你不具備的手段來控制對象的實例化。