2011-01-19 1 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 라이브러리 모두에서 일했습니다. 후자는 더 강력하고 유연하며 simpleXML은 특정주의 사항이 있으므로 선호합니다.

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을 사용하는 것이 더 간단합니다. 속성에 액세스하는 것도 쉽습니다.