Thursday, 19 May 2011

OOP trong PHP - đoạn code bất hủ


Hàng ngày với từng dòng code cơ bản như dưới đây có làm bạn nhàm chát, mệt nhọc, rồi lại nghĩ rằng mình sẽ mãi mãi replay lại những cái này sao. Thảm hại thật :)
  • Select
  • Insert
  • Delete
  • Update
  • Connect
  • Disconnect


Nhưng đừng nản lòng, các phương thức trên chẳng làm khó được bạn mà mang lại sự nhám chán, các phương thức dưới đây sẽ tạo cho bạn một tư tưởng mới. Cái cũ không bao giờ lỗi thời. Một tư tưởng khác biệt hay đó là sự sáng tạo làm cho bạn cảm thấy hứng thú.

  1. class Database  
  2. {  
  3.     public function connect()   {   }  
  4.     public function disconnect()    {   }  
  5.     public function select()        {   }  
  6.     public function insert()        {   }  
  7.     public function delete()        {   }  
  8.     public function update()    {   }  
  9. }  

   Tôi  sẽ không  đề cập đến kiến thức cơ bản ở đây, mà là đề cao tính tư tưởng và suy nghĩ  ( học được qua quá trình đi thử việc ). Những đoạn code trên sau khi đọc điều đầu tiên tôi nghĩ là nó để làm gì chứ không phải là xác định public, function là gì. Những đoạn code này tôi cũng copy nhặt được :). 
  Nhưng vẫn phải giải thích một tẹo

function connect()

/*phương thức kết nối csdl kết nối ra sao đọc php tutorial nha*/
  1. private db_host = ‘’;  
  2. private db_user = ‘’;  
  3. private db_pass = ‘’;  
  4. private db_name = ‘’;   
  5.   
  6. public function connect()  
  7.     {  
  8.         if(!$this->con)  
  9.         {  
  10.             $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);  
  11.             if($myconn)  
  12.             {  
  13.                 $seldb = @mysql_select_db($this->db_name,$myconn);  
  14.                 if($seldb)  
  15.                 {  
  16.                     $this->con = true;  
  17.                     return true;  
  18.                 } else  
  19.                 {  
  20.                     return false;  
  21.                 }  
  22.             } else  
  23.             {  
  24.                 return false;  
  25.             }  
  26.         } else  
  27.         {  
  28.             return true;  
  29.         }  
  30.     }  

public function disconnect()

/*phương thức ngắt  kết nối csdl
* ngắt kết nối ra sao thì lại đọc php tutorial nha
*/
  1. public function disconnect()  
  2. {  
  3.     if($this->con)  
  4.     {  
  5.         if(@mysql_close())  
  6.         {  
  7.                        $this->con = false;  
  8.             return true;  
  9.         }  
  10.         else  
  11.         {  
  12.             return false;  
  13.         }  
  14.     }  
  15. }  

public function select()

/*phương thức hiển thị kết quả
*
*/
  1. private $result = array();   
  2.   
  3. private function tableExists($table)  
  4.     {  
  5.         $tablesInDb = @mysql_query('SHOW TABLES FROM '.$this->db_name.' LIKE "'.$table.'"');  
  6.         if($tablesInDb)  
  7.         {  
  8.             if(mysql_num_rows($tablesInDb)==1)  
  9.             {  
  10.                 return true;  
  11.             }  
  12.             else  
  13.             {  
  14.                 return false;  
  15.             }  
  16.         }  
  17.     }  
/* Hiện thị kết quả từ csdl nhiều bài viết cơ bản sẽ dễ đọc 
* đến đây bắt đầu ngán rồi hả
* trong php và mysql hay bất kỳ ngôn ngữ nào khác 
* sự ngán ngẩm, chán là chuyện thường
* còn nữa, tôi sẽ giải thích tiếp
*/
  1. public function select($table$rows = '*'$where = null, $order = null)  
  2.     {  
  3.         $q = 'SELECT '.$rows.' FROM '.$table;  
  4.         if($where != null)  
  5.             $q .= ' WHERE '.$where;  
  6.         if($order != null)  
  7.             $q .= ' ORDER BY '.$order;  
  8.         if($this->tableExists($table))  
  9.        {  
  10.         $query = @mysql_query($q);  
  11.         if($query)  
  12.         {  
  13.             $this->numResults = mysql_num_rows($query);  
  14.             for($i = 0; $i < $this->numResults; $i++)  
  15.             {  
  16.                 $r = mysql_fetch_array($query);  
  17.                 $key = array_keys($r);  
  18.                 for($x = 0; $x < count($key); $x++)  
  19.                 {  
  20.                     // Sanitizes keys so only alphavalues are allowed  
  21.                     if(!is_int($key[$x]))  
  22.                     {  
  23.                         if(mysql_num_rows($query) > 1)  
  24.                             $this->result[$i][$key[$x]] = $r[$key[$x]];  
  25.                         else if(mysql_num_rows($query) < 1)  
  26.                             $this->result = null;  
  27.                         else  
  28.                             $this->result[$key[$x]] = $r[$key[$x]];  
  29.                     }  
  30.                 }  
  31.             }  
  32.             return true;  
  33.         }  
  34.         else  
  35.         {  
  36.             return false;  
  37.         }  
  38.         }  
  39. else  
  40.       return false;  
  41.     }  

public function insert()

/*
* có hiển thị thì sẽ có thêm nếm vào csdl
* thêm như thế nào thì đây
*
*/
  1. public function insert($table,$values,$rows = null)  
  2.     {  
  3.         if($this->tableExists($table))  
  4.         {  
  5.             $insert = 'INSERT INTO '.$table;  
  6.             if($rows != null)  
  7.             {  
  8.                 $insert .= ' ('.$rows.')';  
  9.             }  
  10.   
  11.             for($i = 0; $i < count($values); $i++)  
  12.             {  
  13.                 if(is_string($values[$i]))  
  14.                     $values[$i] = '"'.$values[$i].'"';  
  15.             }  
  16.             $values = implode(',',$values);  
  17.             $insert .= ' VALUES ('.$values.')';  
  18.             $ins = @mysql_query($insert);  
  19.             if($ins)  
  20.             {  
  21.                 return true;  
  22.             }  
  23.             else  
  24.             {  
  25.                 return false;  
  26.             }  
  27.         }  
  28.     }  

/*
* thêm nhiều quá thì quá tải
* bây giờ thì xóa bớt đi
*
*/

public function delete()

  1. public function delete($table,$where = null)  
  2.     {  
  3.         if($this->tableExists($table))  
  4.         {  
  5.             if($where == null)  
  6.             {  
  7.                 $delete = 'DELETE '.$table;  
  8.             }  
  9.             else  
  10.             {  
  11.                 $delete = 'DELETE FROM '.$table.' WHERE '.$where;  
  12.             }  
  13.             $del = @mysql_query($delete);  
  14.   
  15.             if($del)  
  16.             {  
  17.                 return true;  
  18.             }  
  19.             else  
  20.             {  
  21.                return false;  
  22.             }  
  23.         }  
  24.         else  
  25.         {  
  26.             return false;  
  27.         }  
  28.     }  
/*
*
*/
  1. for($i = 0; $i < count($where); $i++)  
  2.             {  
  3.                 if($i%2 != 0)  
  4.                 {  
  5.                     if(is_string($where[$i]))  
  6.                     {  
  7.                         if(($i+1) != null)  
  8.                             $where[$i] = '"'.$where[$i].'" AND ';  
  9.                         else  
  10.                             $where[$i] = '"'.$where[$i].'"';  
  11.                     }  
  12.                    else  
  13.                    {  
  14.                         if(($i+1) != null)  
  15.                             $where[$i] = $where[$i]. ' AND ';  
  16.                         else  
  17.                             $where[$i] = $where[$i];  
  18.                   }  
  19.                 }  
  20.             }  
/*
*
*
*
*/
  1. $keys = array_keys($rows);  
  2.             for($i = 0; $i < count($rows); $i++)  
  3.             {  
  4.                 if(is_string($rows[$keys[$i]]))  
  5.                 {  
  6.                     $update .= $keys[$i].'="'.$rows[$keys[$i]].'"';  
  7.                 }  
  8.                 else  
  9.                 {  
  10.                     $update .= $keys[$i].'='.$rows[$keys[$i]];  
  11.                 }  
  12.                 // Parse to add commas  
  13.                 if($i != count($rows)-1)  
  14.                 {  
  15.                     $update .= ',';  
  16.                 }  
  17.             }  
/*
*
* thay đổi thông tin
*
*/
  1. public function update($table,$rows,$where)  
  2.     {  
  3.         if($this->tableExists($table))  
  4.         {  
  5.             // Parse the where values  
  6.             // even values (including 0) contain the where rows  
  7.             // odd values contain the clauses for the row  
  8.             for($i = 0; $i < count($where); $i++)  
  9.             {  
  10.                 if($i%2 != 0)  
  11.                 {  
  12.                     if(is_string($where[$i]))  
  13.                     {  
  14.                         if(($i+1) != null)  
  15.                             $where[$i] = '"'.$where[$i].'" AND ';  
  16.                         else  
  17.                             $where[$i] = '"'.$where[$i].'"';  
  18.                     }  
  19.                 }  
  20.             }  
  21.             $where = implode('=',$where);  
  22.   
  23.             $update = 'UPDATE '.$table.' SET ';  
  24.             $keys = array_keys($rows);  
  25.             for($i = 0; $i < count($rows); $i++)  
  26.            {  
  27.                 if(is_string($rows[$keys[$i]]))  
  28.                 {  
  29.                     $update .= $keys[$i].'="'.$rows[$keys[$i]].'"';  
  30.                 }  
  31.                 else  
  32.                 {  
  33.                     $update .= $keys[$i].'='.$rows[$keys[$i]];  
  34.                 }  
  35.   
  36.                 // Parse to add commas  
  37.                 if($i != count($rows)-1)  
  38.                 {  
  39.                     $update .= ',';  
  40.                 }  
  41.             }  
  42.             $update .= ' WHERE '.$where;  
  43.             $query = @mysql_query($update);  
  44.             if($query)  
  45.             {  
  46.                 return true;  
  47.             }  
  48.             else  
  49.             {  
  50.                 return false;  
  51.             }  
  52.         }  
  53.         else  
  54.         {  
  55.             return false;  
  56.         }  
  57.     }  

Cài đặt csdl


  1. <?php;
  2. include('crud.php');  
  3. $db = new Database();  
  4. $db->connect();  
  5. $db->select('mysqlcrud');  
  6. $res = $db->getResult();  
  7. print_r($res);  
  8. ?>  
Kết quả của csdl
/*
* test thử xem sao
*
*
*/
  1. &lt?php;  
  2. $db->update('mysqlcrud',array('name'=>'Changed!'),array('id',1));  
  3. $db->update('mysqlcrud',array('name'=>'Changed2!'),array('id',2));  
  4. $res = $db->getResult();  
  5. print_r($res);  
  6. ?>  

/*
* test thử xem sao
*
*
*/
  1. ;&lt?php;  
  2. $db->insert('mysqlcrud',array(3,"Name 4","this@wasinsert.ed"));  
  3. $res = $db->getResult();  
  4. print_r($res);  
  5. ?>  
===> Quá nhiều phương thức, biến, chữ loằng ngoằng đọc thật khó hiểu. Nguyên gốc của nó là tiếng anh
bạn có thể download tại đây . 
Nhưng tư tưởng mà mình muốn nhắc đến là OOP .
Hãy xác định đối tượng + phương thức + thuộc tính, những cái thâm căn không thay đổi. Nhưng làm sao để xác định được đâu là đối tượng, phương thức, thuộc tính. Loạn mất loạn mất, thực ra mình nghĩ rằng cần thực hiện công việc gì thì viết lấy cái phương thức, cần lấy dữ liệu gì thì tạo cho nó vài thuộc tính. Quen dần thì gọi là thực thi theo chức năng, giờ thấy OOP khá hay. Bạn để ý 

  1. class Database  
  2. {  
  3.     public function connect()   {   }  
  4.     public function disconnect()    {   }  
  5.     public function select()        {   }  
  6.     public function insert()        {   }  
  7.     public function delete()        {   }  
  8.     public function update()    {   }  
 Đến đây tôi sẽ nói là quá đơn giản, khi một người đã xây dựng ra cấu trúc kha khá dễ nhìn nói sao  nhỉ là sáng sủa, OOP nẳm ở đâu chứ đâu. Nhìn đoạn code này 15' phút xem bạn sẽ thấy nó ra sao. Bạn nghĩ ra được không, cố găng nha. Nó sẽ là FRAMEWORK cho các OOP đồ sộ sau này đó...

No comments:

Post a Comment