Phần 1 : Hướng đối tượng là gì, cách khai báo, thiết lập và truy xuất đối tượng, thuộc tính, phương thức
Trong nhiều năm, PHP đã bị coi là một ngôn ngữ nghèo nàn, và đứng
thứ hạng thấp trong bảng xếp hạng ngôn ngữ lập trình bởi ví nó không hỗ
trợ tính hướng đối tượng. Đến năm 2004, phiên bản PHP 5 ra đời đã tạo
ra bước ngoặc mới cho ngôn ngữ lập trình PHP, giúp PHP bắt kịp với xu
thế và trở thành một trong những đối thủ nặng ký so với các ngôn ngữ lập
trình khác. Vậy thì hướng đối tượng là gì? và tại sao nó lại đóng một
vai trò to lớn như vậy ? Hít một hơi thật sâu, làm vài động tác thể dục,
ngồi thẳng lưng và chúng ta bắt đầu phân tích và tìm hiểu về hướng đối
tượng (OOP) trong PHP nào
Theo như định nghĩa của
Wikipedia thì :
Object-oriented programming as a ‘programming paradigm
that represents concepts as “objects” that have data fields and
associated procedures known as “methods”.
Hướng đối tương là môt mô hình lập trình phân tách nội dụng của
chương trình theo hướng cổ điển (thủ tục) và nhóm các thuộc tính, phương
thức (properties, methods) giống nhau thành một đối tượng (class), giúp
rút ngắn , tránh việc dư thừa, và giữ vững được nguyên lý
DRY – DONT REPEAT YOURSELF, dễ dàng trong vấn đề báo trì, tăng hiệu quả công việc.
Hãy thử hình dung bạn xây dựng 1 website hoặc một hệ thống lên cả
nghìn, thậm chí hàng triệu dòng code, các mã lệnh đươc viết theo hướng
cổ điển, một trang web (page) chứa nào là html, php,js, xử lý xen lẫn,
trà trộn với nhau. Và thế là mỗi lần xuất hiện lỗi, gặp phải một vấn đề
nào đó hay chỉ đơn thuần là sửa vài chỗ nhỏ khi có thay đổi yêu cầu thì
bạn phải lục tung cả mớ code, đi sửa từng chỗ này chỗ kia vì các đoạn
code trùng lặp, điều này quả thật là một cơn ác mộng đối với một lập
trình viên. Chính vì thế OOP ra đời nhằm giúp bạn giải quyết vấn đề này.
a. Cấu trúc class
Để khai báo một class trong PHP, ta sử dụng từ khóa class, theo sau là tên class và một cặp ngoặc nhọn
|
class KungfuClass{
// Các phương thức và thuộc tính của class được đặt ở đây
}
?>
|
Sau khi tạo class xong, chúng ta có thể lưu trữ class vào một biến,
và sử dụng biến này truy xuất các phương thức , thuộc tính của class
Để lưu trữ class vào biến, ta sử dụng từ khóa new
|
$object = new KungfuClass();
?>
|
Để xem cấu trúc và nội dung của class như thế nào, bạn dùng từ khóa var_dump() ,
Copy toàn bộ nội dung :
|
class KungfuClass{
// Các phương thức và thuộc tính của class được đặt ở đây }
// Lưu trức class vào biến
$object = new KungfuClass();
var_dump($object);
?>
|
vào một file đặt tên là bai1.php và lưu vào thư mục gốc của website, chạy đường dẫn
http://localhost/bai1.php
và xem kết quả. Vậy là xong, chúng ta đã hoàn thành đoạn mã hướng đối
tượng đầu tiên một cách đơn giản nhất, tiếp theo hãy tìm hiểu cách thức
khai báo thuộc tính và phương thức trong class.
b) Khai báo phương thuộc tính của class
Thuộc tính của class hiểu một cách đơn giản là chỉ như là một biến
chứa dữ liệu thông thường của PHP, chỉ có khác biệt là nó được đặt vào
class và có mối liên quan mật thiết với class chưa nó, và muốn truy xuất
được thuộc tính của class thì phải thông qua một object . Cách khai báo
thuộc tính của class như sau
1
2
3
4
5
6
7
8
9
10
11
12
|
class KungfuClass
{
public $property1 = "Mình là thuộc tính của class KungfuClass !";
}
// Đưa class KungfuClass vào object $object
$object = new KungfuClass;
// Xem nội dung object
var_dump($object);
?>
|
c ) Truy xuất thuộc tính trong class
Để có thể truy xuất thuộc tính trong class, ta dùng con trỏ “->”
của đối tượng object. Giả sử chúng ta muốn truy xuất thuộc tính
$property1 và xuất ra ngoài màng hình dòng chữ “Mình là thuộc tính của
class KungfuClass!”, hãy xem đoạn code dưới đây
|
$object = new KungfuClass();
echo $object->property1;
?>
|
d ) Khai báo phương thức trong class
Cũng như thuộc tính, phương thức của class hiểu đơn giản chính là
function được đặt trong class, và có mối liên quan mật thiết với class.
Để tạo phương thức trong class, chúng ta làm như sau
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class KungfuClass
{
public $property1 = "Mình là thuộc tính của class KungfuClass !";
function myMethod(){
echo "Xin chào, tôi là phương thức của class KungfuClass !";
}
}
// Đưa class KungfuClass vào object $object
$object = new KungfuClass;
// Xem nội dung object
var_dump($object);
?>
|
e ) Truy xuất phương thức trong class
Để truy xuất phương thức trong class, cũng như truy xuất thuộc tính, đơn giản chúng ta dùng con trỏ ->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class KungfuClass
{
public $property1 = "Mình là thuộc tính của class KungfuClass !";
function myMethod(){
echo "Xin chào, tôi là phương thức của class KungfuClass !";
}
}
// Đưa class KungfuClass vào object $object
$object = new KungfuClass();
// Xuất ra màng hình dòng chữ "Xin chào, tôi là phương thức của class KungfuClass !";
$object -> myMethod();
?>
|
Ngoài ra, hướng đối tượng cho phép chúng ta thiết lập và truy xuất
thuộc tính, phương thức bên trong class thông qua con trỏ $this
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
|
class KungfuClass
{
public $property1 = "Mình là thuộc tính của class KungfuClass !";
function myMethod(){
echo "Xin chào, tôi là phương thức của class KungfuClass !";
}
function myMethod2(){
//truy xuất đến thuộc tính $property1
echo $this->property1;
echo " ";
$this->myMethod();
}
}
// Đưa class KungfuClass vào object $object
$object = new KungfuClass();
// Xuất ra màng hình dòng chữ "Mình là thuộc tính của class KungfuClass !" và "Xin chào, tôi là phương thức của class KungfuClass !"
$object -> myMethod2();
?>
|
Chạy lại đoạn script trên, chúng ta sẽ thấy xuất hiện ra ngoài trình
duyệt 2 dòng chữ đó là “Mình là thuộc tính của class KungfuClass !” và
“Xin chào, tôi là phương thức của class KungfuClass !”.
Bằng cách nhóm các đối tượng có điểm tương đồng về thuộc tính và
phương thức trong một class, ta gọi là lớp cha, và được các lớp khác kế
thừa lại (lớp con). Chúng ta sẽ không phải mất thời gian cho việc phải
khai báo đi , khai báo lại những đặc điểm chung đó. chẳng hạn như khi
nói về xe, chúng ta có nào là xe hơi, xe máy, xe ô tô, xe tăng,…Chúng ta
nhận thấy tất cả chúng đều có những đặc điểm chúng như là : vận tốc màu
sắc, trọng lương, có thể chạy được,…chúng ta sẽ quy chúng về một lớp
chung, tạm gọi là lớp Xe, trong lớp Xe này sẽ có các thuộc tính là vận
tốc, màu sắc, kích thước và phương thức chung đó là chạy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class XeClass
{
public $verhicle = "10km/h";
public $weight= "1 tấn";
public $color = "đỏ";
function run(){
echo "Xe đang chạy";
}
// Đưa class XeClass vào object $xe
$xe= new XeClass();
?>
|
Ở ví dụ trên, lớp xe là lớp cha, chứa các đặc điểm chung của các
loại xe và các loại xe như xe hơi, xe máy, xe tăng,.. là các lớp con sẽ
mang nhưng đặc điểm của lớp cha, nhưng khác nhau ở những chi tiết như xe
hơi thì có tốc độ chạy cao hơn xe máy, xe máy thì chạy nhanh hơn xe
tăng,.. hoặc sự khác nhau về màu sắc như xanh, đỏ, tím, vàng,…
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
class XeClass
{
public $verhicle = "10km/s";
public $weight= "1 tấn";
public $color = "đỏ";
function setVerhicle($verhicle_param){
$this -> verhicle =$verhicle_param;
}
function getVerhicle(){
return $this -> verhicle;
}
function run(){
echo "Xe đang chạy";
}
}
// Khởi tạo đối tượng xe hơi
$xehoi = new XeClass();
// Khởi tạo đối tượng xe máy
$xemay = new XeClass();
// Khởi tạo đối tượng xe tăng
$xetang = new XeClass();
//xe hơicó vận tốc 100km/h
$xehoi -> setVerhicle ("100km/h");
//xe máy có vận tốc 60km/h
$xemay -> setVerhicle("60km/h");
//xe tăngcó vận tốc 50km/h
$xetang -> setVerhicle("50km/h");
//Xuất ra vận tốc các loại xe khác nhauy
//Vận tốc xe hơi
echo $xehoi->getVerhicle();
//Vận tốc xe máy
echo $xemay->getVerhicle();
//Vận tốc xe tăng
echo $xetang->getVerhicle();
?>
|
Ở các ví dụ trên, các bạn có để ý thấy từ khóa “public” không ?
Đó chính là tầm vực của biến, bài viết tới mình sẽ nói chi tiết hơn về
vấn đề này. Thân !
0 nhận xét:
Đăng nhận xét