2010-09-25 71 views
0

我有以下的PHP對象,但我努力從對象中獲取數組項。在PHP對象中訪問數組

exampleBatch Object (
[file_path:protected] => 
[title:protected] => 
[description:protected] => 
[link:protected] => 
[items:protected] => Array () 
[raw:protected] => data/example 
[feed_nid:protected] => 
Array ( 
    [0] => Array ([path] => data/example/example/ [filename] => file.csv) 
    [1] => Array ([path] => data/example/example/ [filename] => file.csv) 
    [2] => Array ([path] => dexampleata/example// [filename] => file.csv)) 
[current_item:protected] => 
[created] => 0 
[updated] => 0 
[total:protected] => Array () 
[progress:protected] => Array ([fetching] => 1 [parsing] => 1 [processing] => 1)) 

我需要訪問包含三個鍵的數組,它是一些後處理的數據。

最好的辦法是抓住數組?

回答

10

如果你可以編輯類,要麼改變你所關心的財產,以公共或爲它編寫一個getter:

function getItems() { 
    return $this->items ; 
} 

否則,如果您不能編輯類本身,你可以擴展它,因爲你想要的屬性受到保護,這意味着一個子類可以訪問它們:

class YourClass extends ThatClass { 

    public function getItems { 
     //parent $items really 
     return $this->items ; 
    } 

} 

然後,你需要創建YourClass而不是ThatClass的實例,並從中獲得項目陣列。

類似地,你想要的任何其他受保護的屬性。

+0

看着編輯過的清理過的代碼顯示,您可能正在尋找'$ this-> progress'而不是'items',但是同樣的方法也適用。 – Fanis 2010-09-26 08:33:54

3

對象的feed_nid屬性受保護,因此無法從對象外部訪問。

對象類裏面,你應該寫這樣的函數:

function getFeedNid() 
{ 
    return $this->feed_nid; 
} 

最初的意圖是明顯的,以保持該屬性的內部和外部修飾安全,所以我會用這種方法,而不是爲例如,將protected $feed_nid聲明更改爲public