2014-02-10 3 views
0

데이터베이스 필드에서 Memoizaiton을 수행하려고하고 있는데, 이는 $fieldCache 배열의 결과를 인쇄하지 않으므로 실수로 생각합니다.PHP/OOP : Memoization이 올바르게 완료 되었습니까?

나는 PHP에서 OOP에 상당히 익숙하다. 그래서 누군가가 도와 줄 수 있다면 나에게 충고를 해주면 좋을 것이다.

<?php 


    class Main{ 
     public $id; 
     public $maxT; 
     public $meanT; 
     public $minT; 
     public $dewP; 
     public $meanDP; 
     public $minDP; 
     public $maxH; 
     public $meanH; 
     public $minH; 
     public $maxSLP; 
     public $meanSLP; 
     public $minSLP; 
     public $maxV; 
     public $meanV; 
     public $minV; 
     public $maxWS; 
     public $meanWS; 
     public $maxGS; 
     public $prec; 
     public $cloudCover; 
     public $event; 
     public $windDir; 
     public static $fieldCache=array(); 

     public function getID($table,$date){ 
      return $this->_data('id',$table,$date); 
     } 

     public function getMaxT($table,$date){ 
      return $this->_data('MaxTemperatureC',$table,$date); 
     } 

     public function getMeanT($table,$date){ 
      return $this->_data('MeanTemperatureC',$table,$date); 
     } 

     public function getMinT($table,$date){ 
      return $this->_data('MinTemperatureC',$table,$date); 
     } 

     public function getDewP($table,$date){ 
      return $this->_data('DewPointC',$table,$date); 
     } 

     public function getMeanDewP($table,$date){ 
      return $this->_data('MeanDewPointC',$table,$date); 
     } 

     public function getMinDewP($table,$date){ 
      return $this->_data('MinDewPointC',$table,$date); 
     } 

     public function getMaxH($table,$date){ 
      return $this->_data('MaxHumidity',$table,$date); 
     } 

     public function getMeanH($table,$date){ 
      return $this->_data('MeanHumidity',$table,$date); 
     } 

     public function getMinH($table,$date){ 
      return $this->_data('MinHumidity',$table,$date); 
     } 

     public function getMaxSLP($table,$date){ 
      return $this->_data('MaxSeaLevelPressurehPa',$table,$date); 
     } 

     public function getMeanSLP($table,$date){ 
      return $this->_data('MeanSeaLevelPressurehPa',$table,$date); 
     } 

     public function getMinSLP($table,$date){ 
      return $this->_data('MinSeaLevelPressurehPa',$table,$date); 
     } 

     public function getMaxV($table,$date){ 
      return $this->_data('MaxVisibilityKm',$table,$date); 
     } 

     public function getMeanV($table,$date){ 
      return $this->_data('MeanVisibilityKm',$table,$date); 
     } 

     public function getMinV($table,$date){ 
      return $this->_data('MinVisibilityKm',$table,$date); 
     } 

     public function getMaxWS($table,$date){ 
      return $this->_data('MaxWindSpeedKmh',$table,$date); 
     } 

     public function getMeanWS($table,$date){ 
      return $this->_data('MeanWindSpeedKmh',$table,$date); 
     } 

     public function getMaxGS($table,$date){ 
      return $this->_data('MaxGustSpeedKmh',$table,$date); 
     } 

     public function getPrec($table,$date){ 
      return $this->_data('Precipitationmm',$table,$date); 
     } 

     public function getCloudCover($table,$date){ 
      return $this->_data('CloudCover',$table,$date); 
     } 

     public function getEvent($table,$date){ 
      return $this->_data('Events',$table,$date); 
     } 

     public function getWindDir($table,$date){ 
      return $this->_data('WindDirDegrees',$table,$date); 
     } 

     private function _data($field,$table,$date){ 

      global $fieldCache; 

      //echo ' field : '.$field." | table: ".$table." | date: ".$date."<br />"; 

      $dbh=new PDO("sqlite2:sqlite/dbTest1.db",null,null,array(PDO::ATTR_PERSISTENT=>true)) or die("<link rel='stylesheet' type='text/css' href='../css/style.css' title='Default' /> 
               <center><h3><span class='blue'>Oh my!</span><span class='yellow'> Our</span><span class='red'> database</span><span class='green'> is</span> 
               <span class='blue'>trying</span><span class='yellow'> to escape!</span> <span class='red'>We</span><span class='green'> have dispatched</span><span class='blue'> a team of highly koal-ified</span> 
               <span class='green'>koalas</span><span class='yellow'> to</span><span class='red'> catch it!</span> <span class='blue'>Please</span><span class='red'> try again</span><span class='green'> later</span><span class='yellow'>!</span> 
               <br /> 
               <img src='images/koala_running.gif'><center/><h3 />"); 

      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

       //MemoizationCheck for stored results 
      if(isset(self::$fieldCache[$field][$table][$date])){ 
       echo self::$fieldCache[$field][$table][$date]; 
       return self::$fieldCache[$field][$table][$date]; 
      } 

      $query=$dbh->query("SELECT $field FROM $table WHERE Date=$date"); 
      $result=$query->fetch(PDO::FETCH_ASSOC); 
      self::$fieldCache[$field][$table][$date]=$result; 
       echo self::$fieldCache[$table][$date]; 
      return $result[$field]; 
       echo $result[$field]; 
      unset($dbh); 

     } 




    } 
?> 

그리고 내 다른 파일에서 설정 : 당신은 PHP에서 그들 앞에 self 키워드를 적용하여 정적 속성 (예 : $fieldCache 등)에 액세스 할 수 있습니다

$obj=new Main(); 
    $id=$obj->getID($Country,$datepicker); 
    $maxT=$obj->getMaxT($Country,$datepicker); 
    $meanT=$obj->getMeanT($Country,$datepicker); 
    $minT=$obj->getMinT($Country,$datepicker); 
    $dewP=$obj->getDewP($Country,$datepicker); 
    $meanDP=$obj->getMeanDewP($Country,$datepicker); 
    $minDP=$obj->getMinDewP($Country,$datepicker); 
    $maxH=$obj->getMaxH($Country,$datepicker); 
    $meanH=$obj->getMeanH($Country,$datepicker); 
    $minH=$obj->getMinH($Country,$datepicker); 
    $maxSLP=$obj->getMaxSLP($Country,$datepicker); 
    $meanSLP=$obj->getMeanSLP($Country,$datepicker); 
    $minSLP=$obj->getMinSLP($Country,$datepicker); 
    $maxV=$obj->getMaxV($Country,$datepicker); 
    $meanV=$obj->getMeanV($Country,$datepicker); 
    $minV=$obj->getMinV($Country,$datepicker); 
    $maxWS=$obj->getMaxWS($Country,$datepicker); 
    $meanWS=$obj->getMeanWS($Country,$datepicker); 
    $maxGS=$obj->getMaxGS($Country,$datepicker); 
    $prec=$obj->getPrec($Country,$datepicker); 
    $cloudCover=$obj->getCloudCover($Country,$datepicker); 
    $event=$obj->getEvent($Country,$datepicker); 
    $windDir=$obj->getWindDir($Country,$datepicker); 

답변

0

여기

내 클래스 코드

if(isset(self::$fieldCache[$field][$table][$date])){ 
    return self::$fieldCache[$field][$table][$date]; 
} 

self은 전류 클래스

하고 제안 된 방법으로 global 재산

+0

할 필요가 여전히 통과 아무것도하지만, 여전히'에코 $ fieldCache [$ 필드] [$ 테이블] [$ 날짜]를 통해 표시되지 않습니다,' – braumer

+0

은 너 반향하고 있니? – zzlalani

+0

만약 클래스에 에코가 있다면, 클래스 이름으로'Main :: $ fieldCache [$ field] [$ table] [$ date]' – zzlalani