Tek MySQLi Bağlantı oluşturmak için Singleton kullanarak ve birden çok nesneye kullanıyor?

0 Cevap php

Günaydın millet!

Php5 ile Oo geldiğinde ben öz olarak PHP tamamen yeni ama hala yeni değilim. Şimdi, ben HTML5 ve bazı OO PHP kullanmak istedim bu küçük proje düşündüm. Bu yatay kaydırılabilir çizelgesi bir gün olması gerekiyordu.

Bu yüzden bir sınıf Timeline oluşturuldu. Bu benim ana amacıdır. Diğer yöntemler arasında, bir yöntem ($timeline->createYearString();) yıllık zaman dizi oluşturmaktır. Ben yöntemi createYearString(); Benim yıllar HTML çıktı oluşturmak amacıyla kez X sayısı çağıran başka bir sınıf Year uygulanmaktadır.

Gerçekleri ile benim yıllar doldurmak için, bir veritabanı bağlantısı gerekir. Etrafta arama ve mysqli singleton hakkında Atli yorumundan (http://www.dreamincode.net/forums/topic/81496-connection-to-the-mysql-using-oop/page__view__findpost__p__1038512) bulundu mysql bağlantılarının doğru oop-yaklaşıma yeni olmak. Onu hayata ve sınıf Year nesnesi olarak kullanmaya çalıştı. Komik bir şey, $ dbLink anında tam olarak ilk biriydi şekilde oluşturulan ikinci bir ilk nesne için döndü ama alır. $this->db aniden ikinci yıl NULL döndürüyor ve bu nedenle ben PHP bir nesne olmayan ÖLÜMCÜL hatası alıyorum

Aşağıda benim üç sınıflarına bakın. Ne eksik?

class Year {
 private $year;
 private $db;

 function __construct($year) {
  $this->year=$year;
  $this->db=MyDB::Get();
 }

 function createHTML($last='') {
  $out=" <div class=\"year_outer".(($last) ? ' last_year' : '')."\" id=\"y".$this->year."\">
     <div class=\"year_inner\">
      <div class=\"year_above\">
       <span class=\"yearnr\">".$this->year."</span>
      </div>
      <div class=\"year_below\"></div>
     </div>
     <div class=\"months_wrapper\">\n";
  if(!$last) {
   for($i=1; $i<=12; $i++) {
    $fDoM = mktime(0,0,0,$i,1,$this->year);            // $fDoM = first Day of Month
    $lDoM = mktime(0,0,0,$i,date('t',mktime(0,0,0,$i,1,$this->year)),$this->year);  // $lDoM = last Day of Month
    $sql = $this->db->query("SELECT * FROM tp_together");
    //echo date('d.m.Y',$fDoM)." bis ".date('d.m.Y',$lDoM)."\n";

    $out.= " <div class=\"month_outer_l\" id=\"".$this->year."-".$i."\">
        <div class=\"month_outer_s\">
         <div class=\"month_inner\"><span>".date("M",mktime(0,0,0,$i,1,$this->year))."</span></div>
        </div>
       </div>\n";
    } 
  }  
  $out.= " </div>
    </div>\n";

  return $out;
 }
}

class Timeline {
 public $daysDating;
 public $startYear;
 public $endYear;
 public $numberOfYears;

 function __construct($start,$end='') {
  $this->startYear = $start;
  $this->endYear  = ($end=='') ? date("Y")+1 : $end;
  $this->daysDating = $this->calcDaysDating();
  $this->numberOfYears= $this->calcNumberOfYears();
 }

 function createYearString() {
  $x=new Year('2004');
  print $x->createHTML();
  $y=new Year('2005');
  print $y->createHTML();
  $z=new Year('2006');
  print $z->createHTML(true);

  // $j=$this->endYear;
  // for($i=$this->startYear; $i<=$j; $i++) {
  //  $x=new Year($i);
  //  ($i==$j) ?
  //   print $x->createHTML(true) :
  //   print $x->createHTML();
  // }
 }

 private function calcDaysDating() {
  $today=mktime(0,0,0,date("m"),date("d"),date("y"));
  $day1=mktime(0,0,0,7,11,2006);

  return $today-$day1;
 }

 private function calcNumberOfYears() {
  return $this->endYear - $this->startYear +1;
 }

 function createHNavigation() {
  $x=1;
  $out='<ul>';
  for($i=$this->startYear; $i<=$this->endYear; $i++) {
   $out.="<li><a class=\"navBubble\" id=\"navBubble$i\" accesskey=\"$x\" href=\"#y$i\" title=\"Go to $i\"></a></li>\n";
   $x++;
  }
  $out.="</ul>";
  return $out;
 }
}

class MyDB {
 private static $dbLink;

 private function __construct() {}
 private function __clone() {}

 public static function Get() {
  if(!self::$dbLink) {
   self::$dbLink = new mysqli(DB_HOST, DB_USER, DB_PWD, DB_NAME);
   if(mysqli_connect_errno()) {
    throw new Exception("Database connection failed: ".mysqli_connect_error());
   }
   return self::$dbLink;
  }
 }
}

Durumda benim sorunum açık vermedi. $ X çalışıyor 2004 ($ x = new Year ('2004 ')) benzer. Ama sonra folling $ y ($ y = new Year ('2005 ') döndürür NULL ÖLÜMCÜL HATA verir ve $ this-> db - NEDEN?

Çok teşekkürler, sizin yardım büyük beğeni topluyor.

0 Cevap