2011-01-19 2 views
1

を使用します。リファクタリングXML_Unserializerの依存クラスは、私は、このXMLファイルを取り、クラスを持っているのDOMDocument

Array 
(
    [language] => en-US 
    [meta] => <title></title> 
    [pagecontent] => Array 
     (
      [class] => test 
) 

次に、配列のキーの値を返すメソッドがあります。例えば、私が言語を使いたい場合は、$class->getData('language')または$class->getData('pagecontent:class')を使います。

私たちはPHP4をサポートしていないので、ネイティブXMLの実装に頼ることができます。私はSimpleXMLと標準のphp DOMライブラリの両方で働いています。私はより強力で柔軟性があり、シンプルなXMLには特定の警告が付いているので後者を好む。

私はunserializerクラスを使用しているので、ほぼすべての私の方法は、foreachとしての機能方法と対話します。私は配列を保持する価値があるのだろうかと疑問に思っています。それは私のすべてのメソッドをリファクタリングすることから私を救うでしょうか?また、その後、次のようなメソッドを実装しなければならないので、私は、それが時には要素の全体のnodeValueをつかむために苦痛だということを知っている:

function innerHTML($node){ 
    $doc = new DOMDocument(); 
    foreach ($node->childNodes as $child) 
    $doc->appendChild($doc->importNode($child, true)); 

    return $doc->saveHTML(); 
} 

をそして、それはそれは常に作成されますので、何度もそのメソッドを使用して非効率ですDOMDocumentおそらく同じメソッドをリファクタリングして同じDOMDocumentを何度も使用してフラグメントを追加することができますが、それは過剰なようです。

標準DOMライブラリを使用する必要があるかどうか、DOM関数を使用するすべてのメソッドをリファクタリングするか、配列を作成してメソッドをそのまま使用するかどうかという観点から、この方法で入力していただければ幸いです。新しいバグを導入する機会を減らすために?

ありがとうございました。

+0

うーん、これは答えのために十分であるかどうかわかりません。基本的には、現在動作していてパフォーマンスやメンテナンスに関する問題がない場合はそのまま残しておきます。いずれにしても、リファクタリングを試みる前にUnitTestsが存在することを確認したいと思います。 UnitTestsは、コードを変更するときに新しいバグが導入されるリスクを大幅に軽減します。 – Gordon

+0

私たちの開発者はXML_Unserializer/PEARについて不平を言っています。そのため、リクエストはネイティブのPHP5メソッドを使用するようになっています。 –

答えて

0

それだけでいくつかの変更をforeach文を維持することが可能ですので、私はあなたのケースでのSimpleXMLを使用すると思います。これは、PHPのDOM自体を使用するよりもXMLを簡単に使用します。属性へのアクセスも簡単です。

関連する問題