رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کلاس دیتابیسم درسته ؟
#1
سلام خدمت دوستان و جناب شهرکی

من توابعی که در مورد کار با  دیتابیس آقای شهرکی  بصورت procedural نوشته بودن (تو اموزششون) ، اون کدها رو بصورت شی گرا و با کمک mysqli بازنویسیش کردم ، میخواستم نظر دوستان رو بدونم که این کلاسی که نوشتم از نظر ساختاری مشکلی نداره ؟ یعنی منظورم اینه که کدنویسیش درست بوده یا نه ؟ ممنون میشم نظرتون رو بگین Cool  ، ضمنا اگه کم و کسری چیزی داشتم ممنون میشم کمکم کنید تا کاملترش کنم !
<?php

class DB
{
   private $con;
   private $host = 'localhost';
   private $user = 'root';
   private $pass = '';
   private $name = 'web';

   public function __construct()
   {
       $this->con = new mysqli($this->host, $this->user, $this->pass, $this->name);
       $this->con->query("SET NAMES UTF8");
       $this->con->set_charset('utf8');
       if ($this->con->connect_error) {
           echo 'Error Database !' . $this->con->connect_errno;
           return false;
       }
       return true;
   }

   public function AffectedRows()
   {
       return $this->con->affected_rows;
   }

   public function Query($query)
   {
       return $this->con->query($query);
   }

   public function ArrayQuary($query)
   {
       $result = array();
       $queryresult = $this->Query($query);
       if ($queryresult->num_rows > 0) {
           while ($row = $queryresult->fetch_assoc()) {
               $result[] = $row;
           }
       }
       return $result;
   }

   public function DBEscape($value)
   {
       return $this->con->real_escape_string($value);
   }

   public function __destruct()
   {
       $this->con->close();
   }
}
پاسخ
تشکر شده توسط:
#2
تبریک میگم. خیلی خوب نوشتین. پیشنهاد میکنم یه متد هم برای دستیابی به Last Insert ID و همچنین خطای احتمالی تولیدشده بنویسید.
پاسخ
تشکر شده توسط: sina
#3
ممنون از لطفتون جناب شهرکی

حتما این کارهایی که گفتین انجام میدم ، یه کار دیگه ای هم که خودم در نظر داشتم انجام بدم اینه که اطلاعات دیتابیس رو به عنوان پارامتر به کانستراکتور پاس بدم و از اونجا به پراپرتی ها مقدار بدم که بشه به چند تا دیتابیس وصل شد Angel
پاسخ
تشکر شده توسط:
#4
(18-07-1394، 04:49 ب.ظ)sina نوشته: ممنون از لطفتون جناب شهرکی
...اطلاعات دیتابیس رو به عنوان پارامتر به کانستراکتور پاس بدم و از اونجا به پراپرتی ها مقدار بدم که بشه به چند تا دیتابیس وصل شد Angel

درستشم همینه
که یکی از اصول Solid هست
Dependency inversion principle

یادگیری مداوم حداقل شرط لازم برای موفقیت در هر زمینه ای است که در آن فعالیت می کنید؛ هر روز چیز جدیدی بیاموزید.
پاسخ
تشکر شده توسط: sina
#5
بسیار عالی اما وقتی خود mysqli کلاسه چرا از ویژگی وراثت استفاده نکنیم مثلا اینطوری :

<?php
//Config
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'my_db');
//***************************

class DB extends mysqli {

	public function __construct() {
		parent::__construct(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
		if ($this->connect_error) {
    		die("Failed to connect to MySQL: (" . $this->connect_errno . ") " . $this->connect_error);
		}
	}

	public function affectedRows() {
		return $this->affected_rows;
	}
	public function arrayQuery($query) {
		$result = array();
       	$queryresult = $this->query($query);
       	if ($queryresult->num_rows > 0) {
           while ($row = $queryresult->fetch_assoc()) {
               $result[] = $row;
           }
       	}
       	return $result;
	}

	public function dbEscape($value) {
		return $this->real_escape_string($value);
	}

	public function __destruct() {
		$this->close();
	}
}

//Usage
$db = new DB;
$sql = 'SELECT * FROM `users`;';
$users = $db->arrayQuery($sql);
echo '<pre>' . print_r($users, true) . '</pre>';
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: sina , ADMIN
#6
(18-07-1394، 06:32 ب.ظ)bgsrb88 نوشته: درستشم همینه
که یکی از اصول Solid هست
Dependency inversion principle

ممنون از راهنماییتون ، به نکات خوبی اشاره کردین که منو مجبور به سرچ کردن در موردش کرد Wink

(18-07-1394، 06:33 ب.ظ)hamo نوشته: بسیار عالی اما وقتی خود mysqli کلاسه چرا از ویژگی وراثت استفاده نکنیم مثلا اینطوری :
ممنون از شما جناب hamo عزیز ، اتفاقا سوالی که تو ذهنم بود رو قبل از اینکه بپرسم پاسخش رو دادین Angel حتما اینو هم لحاظ میکنم
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان