2017-07-24 40 views
0

創建一個只過濾的內容的對象我已經在PHP創建與構造一類過濾器的XML文件。但是創建的對象需要所有的xml數據。我怎樣才能避免這種情況?如何在PHP OOP

謝謝你的幫助!

我的代碼:

class Property { 
    public $xmlClass; 
    public $elemClass = ''; 
    public $result_array = []; 
    public $data = ''; 

    public function __construct($xml,$elem) { 
     $this->xmlClass=$xml; 
     $this->elemClass=$elem; 

     foreach($xml->list->movie as $value) { 
      $data = $value->$elem; 
      $result_array[] = $data; 
     } 

     print_r($result_array);     //here everything is ok 
    } 
} 

$result_title = new Property('title'); 
print_r($result_title); //here object takes all data, not only filtered 
+0

'$ result_title'是一個具有很多道具的對象。 '$ result_array'是你的過濾數據的列表。目前它們之間有__no連接___。 –

+0

所以你的意思是我必須以某種方式使用方向?我想$ result_title會抓取everyting,xml數據庫和過濾的數據。我真懷疑是否有任何解決方案,繼續這一代碼或basicaly我在OOP的知識太少 – Joey

+0

是的,這就是我正在尋找一整天的方式。非常感謝你,你是我的英雄! :) – Joey

回答

1

$result_title對象有很多道具。其中有,你把它分配給xmlClass財產是你最初的xml

得到你需要將其存儲在一個類的屬性所需要的數據,你已經聲明它($result_array)。

所以,正確的代碼可能是:

class Property { 
    public $xmlClass; 
    public $elemClass = ''; 
    public $result_array = []; 
    public $data = ''; 

    public function __construct($xml,$elem) { 
     $this->xmlClass=$xml; 
     $this->elemClass=$elem; 

     foreach($xml->list->movie as $value) { 
      $data = $value->$elem; 
      // add data to a class property `result_array` 
      $this->result_array[] = $data; 
     } 
    } 

    // get value of `result_array` with this method 
    public function getResultArray() 
    { 
     return $this->result_array; 
    } 
} 

$result_title = new Property('title'); 
print_r($result_title->getResultArray()); 
+0

現在的問題是對我來說,創建數組的鍵始終爲「0」,奇怪,而且很unusefull。我現在有json,每個鍵都有:「0」。這個代碼有沒有希望? – Joey

0

這樣做的原因是這兩條線:

$this->xmlClass=$xml; 
    $this->elemClass=$elem; 

您將它們分配給對象。您可以將result_array保存到對象的屬性並訪問該對象:

class Property { 
    public $xmlClass; 
    public $elemClass = ''; 
    public $result_array = []; 
    public $data = ''; 

    public function __construct($xml,$elem) { 
     $this->xmlClass=$xml; 
     $this->elemClass=$elem; 

     foreach($xml->list->movie as $value) { 
      $data = $value->$elem; 
      $result_array[] = $data; 
     } 

     $this->titles = $result_array); 
    } 
} 

$object = new Property('title'); 
print_r($object->titles);