Thứ Năm, 29 tháng 9, 2016

PHP NÂNG CAO - Lập trình hướng đối tượng - class database trong php

Class database trong lập trình hướng đối tượng, chúng ta sẽ xây dựng class database có các phương thức cơ bản để chúng ta sử dụng nhiều lần. Lập trình hướng đối tượng nó khác thủ tục ở cái viết một lần để sử dụng nhiều lần đó 

Class database bao gồm
  1. Kết nới đến cơ sở dữ liệu
  2. Phương thức query(), thực hiện câu lệnh truy vấn
  3. Phương thức num_rows() đếm số dòng dữ liệu trả về từ câu truy vấn
  4. Phương thức fetch() lấy một dòng dữ liệu trả về từ câu truy vấn
  5. Phương thức fetchAll() lấy nhiều dòng dữ liệu trả về từ câu truy vấn

1. Phép gán, cách truyền biến vào hàm

Như chúng ta đã biết phép gán được ký hiệu bởi dấu " = ", nó được dùng để gán giá trị cho một biến
Ví dụ : $name = "Nguyễn Văn Tèo"; // gán giá trị Nguyễn Văn Tèo cho biến $name

Ở trong một class đôi khi chúng ta cần gán một giá trị cho thuộc tính để sử dụng, chúng ta sẽ set như thế nào, ta xét ví dụ sau
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
class person{   
    public $ten = "Tèo";
    public function setname($name){
        $this->ten = $name;
    }
    public function getname(){
        return $this->ten;
    }
}
 
$person = new person();
echo "Xin chào ".$person->ten." <br />"; // Xin chào Tèo
 
$person->setname("Nguyễn Văn Tèo");
echo $person->getname(); // Xin chào Nguyễn Văn Tèo
 
?>
Ah, qua ví dụ trên ta thấy mới đầu thuộc tính $tên có giá trị là "Tèo", sau khi ta chạy hàm setname() thì thuộc tính $ten được gán giá trị mới là "Nguyễn Văn Tèo". Qua đây ta hiểu được phần nào phép gán giá trị trong một class rùi đúng không nào?

- Các bạn thấy ở phương thức ( hàm)  $person->setname("Nguyễn Văn Tèo"); ta có truyền vào một biến là kiểu string là "Nguyễn Văn Tèo" đây chính là cách ta truyền một biến vào trong một hàm

- Ví dụ về cách truyền biến vào hàm
1
2
3
4
5
6
7
8
9
10
11
<?php 
class toan{   
    public function giaipt($a,$b){
        $x = -$b/$a;
        echo "Phương trình $ax + $b = 0 có x =".$x;
    }
}
 
$toan = new toan();
$toan->giaipt(4,-8); // Phương trình 4x - 8 = 0 có x = 2
?>
Ở ví dụ trên ta đang truyền 2 biến $a=4 và $b=-8 vào hàm giaipt để tìm x

2. Khởi tạo class database

Ở bài này chúng ta sẽ sử dụng thông tin cơ sở dữ liệu của class config, bạn nào chưa xem có thể xem lại tại đây nhé
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php 
require("config.php"); // Gọi file config.php
 
class database{   
    protected $_conn = "";
    protected $_result = ""
    public function __construct(){ // Kết nối csdl đầu tiên
        $this->_conn = mysql_connect(config::HOST,config::USER,config::PASS)
        or die("Can't connect database");
        mysql_select_db(config::DATA,$this->_conn); // Lựa chọn csdl
        mysql_query("SET NAMES utf8"); // Chuyển dữ liệu trả về sang kiểu utf8
    }
    public function query($sql){
        if($this->_conn){ // nếu đã kết nối csdl
            $this->_result = mysql_query($sql); /* Gán kết quả trả về của câu truy
                                                 vấn cho biến $_result */
        }                                
    }
    public function num_rows(){
        if($this->_result){ // nếu đã có kết quả trả về từ câu truy vấn
            $rows = mysql_num_rows($this->_result);
        }else{
            $rows = 0;
        }
        return $rows; // trả về số dòng tìm được
    }
    public function fetch(){
        if($this->_result){ // nếu có kết quả trả về của câu truy vấn
            $data = mysql_fetch_assoc($this->_result);
        }else{
            $data = array();
        }
        return $data;
    }
    public function fetchAll(){
        if($this->_result){ // nếu có kết quả trả về của câu truy vấn
            while($db = mysql_fetch_assoc($this->_result)){
                $data[] = $db;
            }
        }else{
            $data = array();
        }
        return $data;
    }
}
?>
3. Hướng dẫn class database 
Chắc hẳn các bạn mới học nhìn vào cách viết hướng đối tượng sẽ thấy khó hiểu vì nó không giống cách viết thông thường, nó toàn sử dụng $this với -> phải không nào. Đừng ngại, từ từ chúng ta sẽ tìm hiểu sâu về nó

a. $this được hiểu là class hiện tại, nếu như bình thường bạn gán biến $a = 10, thì trong class sẽ dùng $this->a = 10.

b. Hàm __construct() được gọi để khi ta sử dụng class database mặc định nó sẽ kết nối csdl đầu tiên
    
    Nếu như bình thường ta viết 
           $conn = mysql_connect("locahot","user","pass"); 
    thì bên hướng đối tượng ta viết
           $this->_conn = mysql_connect("locahot","user","pass"); 
   
    Lúc này biến $_conn sẽ lưu thông tin kết nối csdl ( có thể là đã hoặc chưa kết nối csdl)

c. Hàm query($sql), ở hàm này có chức năng thực hiện truy vấn cơ sở dữ liệu
    
   Nếu như viết thường là 
            $result = mysql_query($sql); 
    thì bên hướng đối tượng ta viết
            $this->_result = mysql_query($sql);

d. Hàm fetch() lấy ra một dòng dữ liệu trả về từ câu truy vấn
    
    Nếu như viết thường 
            $result = mysql_query("select * from tbl_users where user_id = 1"):
            $data = mysql_fetch_assoc($result);
    Bên hướng đối tượng ta sẽ viết
            $data = mysql_fetch_assoc($this->_result);
e. Hàm fetchAll tương tự hàm fetch()
    Hàm fetchAll() để lấy nhiều dòng kết quả từ câu truy vấn, vì kết quả của truy vấn trả về nhiều dòng dữ liệu nên ta sẽ sử dụng vòng lặp while gán vào biến $data
     while($db = mysql_fetch_assoc($this->_result)){
    $data[] = $db;
}
nguồn http://phpandmysql.net/


EmoticonEmoticon