2010-02-07 4 views
0

하나의 XML 피드를 사용하는 PHP 코드를 작성했습니다. 이 피드는 다양한 계산을 위해 약 12 ​​개의 함수에서 사용됩니다. 각 함수에서 simplexml_load_file을 사용하여 파일을로드합니다. 전달 된 변수에 따라 다양한 결과를 표시하기 위해 동일한 페이지에서 여러 함수가 호출됩니다. 나는 모든 기능에 의해 사용될 수있는 XML 피드를 한 번로드 할 수있는 방법이 있는지 알고 싶습니다. 각 페이지에 5 ~ 6 번 파일을로드하는 대신 전달 된 변수에 따라 모든 계산을 수행합니까?PHP에서 모든 함수에 대해 XML 파일을 한 번로드하는 방법

답변

0
  1. 싱글 톤을 사용하고 XML을 멤버 속성으로 사용하면 동일한 요청에 대해 작동합니다. 사람이 XML에 액세스해야 할 때마다 , 그들은 전화 :

    $ XML = 싱글 ::은 GetXML(); 당신이 요청의 수를 통해 뭔가를 계속하려면

  2. , 당신의 가장 좋은 방법은 memcache를하거나 데이터베이스 같은 일부 캐시 층에 충실하는 것입니다.

  3. 은 세계적인 $ XML을 확인하고 요청의 시작을 처리합니다. 기능은

0
$xmlfeed = file_get_contents("http://website.com/xml.xml"); 

doSomeFeedMagic($xmlfeed); 

doSomeMoreMagic($xmlfeed); 

: 당신이 당신의 함수를 호출

function doSomeFeedMagic($feed){ 

    // do magic here 

} 


function doSomeMoreMagic($feed){ 

    // do magic here 

} 

로드 공급하기 전에 다음 변수로 함수에 전달합니다.

0

당신은 XML 파일에서 모든 기능과 값을 포함하는 정적 클래스를 만들 수있다.

class Calculations { 

    private static $_xmlData; 

    static function loadXml() { 
     // load xml file and save data in self::$_xmlData 
    } 


    static function calculation01() { 
      // calculate using self::$_xmlData 
    } 

} 

서로 다른 데이터와 동일한 구조를해야 할 경우, 단지 기능이 정지하지 않습니다.

2

함수가 매우 다른 경우 함수에 캐시 할 수 있습니다. 예를 들어 파일을 수동으로로드하는 대신 load_xml()을 호출하면 캐시됩니다. 이는 또한 모든 변경 사항이 캐시에 충실한다는 것을 의미합니다. 복사본을 원한다면 복제해야합니다.

function load_xml($filename) 
{ 
    static $cache = array(); 

    if (!isset($cache[$filename])) 
    { 
     $cache[$filename] = simplexml_load_file($filename); 
    } 

    return $cache[$filename]; 
} 

그렇지 않으면, 당신은 클래스로 피드 처리를 그룹화 나을 및 객체 VAR로 원본 문서를 캐시 할 수있다.

class feed_processor 
{ 
    protected $feed; 

    public function __construct($filename) 
    { 
     $this->feed = simplexml_load_file($filename); 
    } 

    public do_some_stuff() 
    { 
     $this->feed->addChild('foo', 'bar'); 
    } 
} 
관련 문제