これらすべてに対して、オブジェクト指向のアプローチをお勧めします。
1)各オブジェクトを変換する必要がある各データ型のインターフェイスを作成します
interface xmlSerializable {
public function toXML();
}
interface csvSerializable {
public function toCSV();
}
interface txtSeriablizable() {
public function toTXT();
}
2)implement
クライアントと各インターフェイスのさまざまな形式にシリアル化する必要があるデータのタイプを表すクラスを作成します
class Data implements xmlSerializeable { // I only implemented one for brevity
private $id = null;
private $stuff = null;
private $otherStuff = null;
private $stuffArray = array();
public __construct($id, $stuff, $otherStuff, $stuffArray) {
$this->id = $id;
$this->stuff = $stuff;
$this->otherStuff = $otherStuff;
$this->stuffArray = $stuffArray;
}
public function getId() { return $this->id; }
public function toXML() {
$output = '<?xml version="1.0" encoding="UTF-8"?>'."\n".
'<data>'."\n\t".
'<id>'.$this->id.'</id>'."\n\t".
'<stuff>'.$this->stuff.'</stuff>'."\n\t".
'<otherStuff>'.$this->otherStuff.'</otherStuff>'."\n\t".
'<stuffArray>'."\n\t\t";
foreach($this->stuffArray as $stuff) {
$output .= '<stuff>'.$stuff.'</stuff>'."\n\t\t";
}
$output .= '</stuffArray>'."\n".
'</data>';
return $output;
}
}
これで、SQLクエリを受け入れてオブジェクトの配列を返すをData
作成することにより、データベースからオブジェクトを作成できます。それらをシリアル化するには、フォーマットごとに実装したメソッドを呼び出すだけです。DataFactory
Data
$df = new DataFactory($pdo);
$datas = $df->query('SELECT * FROM Data');
foreach($datas as $data) {
file_put_contents('/data/xml/'.$data->getId().'.xml', $data->toXML());
// You can add other formats here in the above fashion
}