تالار گفتمان nCIS.ir

نسخه‌ی کامل: کلاس دیتابیسم درسته ؟
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام خدمت دوستان و جناب شهرکی

من توابعی که در مورد کار با  دیتابیس آقای شهرکی  بصورت 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();
   }
}
تبریک میگم. خیلی خوب نوشتین. پیشنهاد میکنم یه متد هم برای دستیابی به Last Insert ID و همچنین خطای احتمالی تولیدشده بنویسید.
ممنون از لطفتون جناب شهرکی

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

درستشم همینه
که یکی از اصول Solid هست
Dependency inversion principle
بسیار عالی اما وقتی خود 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>';
(18-07-1394، 06:32 ب.ظ)bgsrb88 نوشته: [ -> ]درستشم همینه
که یکی از اصول Solid هست
Dependency inversion principle

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

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