Bài 25: PHP – OOP Step By Step (part 1)
Có một số bạn đã gửi email cho tôi và nói rằng, bài Lập Trình Hướng Đối Tượng (Bài 18) trong serial PHP Tutorial này quá nhiều, và cảm thấy khó hiểu khi mới tiếp cận. Ok! Mục đích của bài học hôm nay tôi sẽ hướng dẩn từng bước một về lập trình hướng đối tượng cho các bạn chưa từng biết, và mới ...
Có một số bạn đã gửi email cho tôi và nói rằng, bài Lập Trình Hướng Đối Tượng (Bài 18) trong serial PHP Tutorial này quá nhiều, và cảm thấy khó hiểu khi mới tiếp cận.
Ok! Mục đích của bài học hôm nay tôi sẽ hướng dẩn từng bước một về lập trình hướng đối tượng cho các bạn chưa từng biết, và mới bắt đầu.
Để tạo những thứ dể dàng, bài học này tôi sẽ chia ra thành 22 bước.
Here we go….
Step 1:
Trước tiên những thứ mà chúng ta cần làm là tạo 2 trang PHP:
- index.php
- class_lib.php
Code hướng đối tượng là dùng để tái sử dụng ở nhiều nơi, do vậy tất cả code OOP chúng ta sẽ lưu trữ ở các file riêng biệt rồi sau đó đưa vào các trang PHP bình thường bằng cách sử dụng “includes”.
Trong trường này, tất cả code OO PHP sẽ trong file class_lib.php.
OOP xoay quanh một cấu trúc được gọi là ‘class’. Các class là một template (mẩu, mô hình) mà được sử dụng để định nghĩa đối tượng.
Step 2:
Tạo một class đơn giản trong class_lib.php
Bạn định nghĩa class của bạn bắt đầu bằng từ khóa ‘class’ theo sau là tên mà bạn muốn đặt cho class mới của bạn.
<?php class person { } ?> |
Lưu ý: Bạn đính kèm theo class 2 dấu ngoặc nhọn, giống như bạn làm với hàm.
Step 3:
Thêm dữ liệu cho class chúng ta.
Một trong điểm khác biệt lớn giữa hàm và class đó là một class chứa đựng cả 2 dữ liệu (các biến) và các hàm mà tạo thành một gói dữ liệu(package) gọi là (“object”) đối tượng.
Khi bạn tạo một biến bên trong class,nó sẽ được gọi là thuộc tính ‘property’.
<?php class person { var $name; } ?> |
Step 4:
Thêm hàm/phương thức cho class.
Hàm được tạo trong class thì gọi là phương thức (method). Các phương thức của class được sử dụng để thao tác dữ liệu của chính nó và các thuộc tính.
<?php class person { var $name; function set_name($new_name) { $this->name = $new_name; } function get_name() { return $this->name; } } ?> |
Lưu ý: Đừng quên rằng trong một class, các biến được gọi là thuộc tính (properties) và các hàm được gọi là phương thức “methods”.
Step 5:
Các hàm get và set.
Chúng ta đã tạo 2 phương thức thú vị đó là get_name() và set_name().
Các phương thức này theo một quy ước chung cho OOP mà bạn có thể thấy trong nhiều ngôn ngữ (bao gồm java và ruby) – Nơi bạn tạo các phương thức để ‘set’ và ‘get’ các thuộc tính trong một class.
Một quy ước khác là các set và get đó tên phải phù hợp với tên thuộc tính.
<?php
class person {
var $name;
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() {
return $this->name;
}
}
?>
Lưu ý: tên của getter và setter, khớp với tên thuộc tính liên kết.
Bằng cách này, khi lập trình viên PHP khác muốn sử dụng đối tượng của bạn, họ sẽ biết rằng nếu bạn có một phương thức được gọi là ‘set_name()’, thì họ biết có một thuộc tính gọi là ‘name’.
Step 6:
Biến $this.
Bạn có thể thấy dòng code này:
$this->name = $new_name;
$this là một biến được xây dựng mà nó trỏ vào đối tượng hiện hành. $this là một biến đặc biệt tham chiếu chính nó. Bạn sử dụng $this để truy cập các thuộc tính và để gọi các phương thức của class hiện tại.
function get_name() { return $this->name; } |
Lưu ý: Cái này có thể có một ít bối rối cho một số bạn. Đó là bởi vì bạn đang thấy trước đó, một trong những khả năng xây dựng hướng đối tượng mà tự động lại nhét vào chính nó.
Thôi bây giờ chỉ suy nghĩ rằng $this là một keyword đặc biệt, khi mà đi qua nó, PHP sẽ biết những gì để làm.
Step 7:
Sử dụng class vào trang PHP chính (index.php)
Bạn sẽ không bao giờ tạo class PHP trực tiếp bên trong trang chính của bạn – điều này sẽ giảm cho mục đích hướng đối tượng.
Luôn là cách tốt nhất tạo các trang PHP khác nhau mà chỉ chứng đựng các class. Rồi sau đó bạn sẽ truy cập các đối tượng của class bằng cách include chúng tới trang chính của bạn bằng cách sử dụng ‘include’ hoặc ‘required’.
<?php include(“class_lib.php”); ?>
Lưu ý: Chúng ta chưa có làm bất kỳ cái gì trong class của chúng ta. Chúng ta sẽ làm ở bước kế tiếp.
Step 8:
Khởi tạo (instantiate) đối tượng.
Các class chỉ là một mẩu, mô hình của các đối tượng. Các không thực sự trở thành đối tượng cho đến khi bạn làm một vài thứ gọi là : khởi tạo (instantiation).
Khi bạn khởi tạo một class, bạn tạo một thể hiện (instance of) của nó (năm xưa thầy mình cũng chơi từ thể hiện, tôi nghe như sấm bên tai =)) ). Như vậy đạng tạo đối tượng.
Một cách diễn giải khác, việc khởi tạo là quá trình tạo một đối tượng trong bộ nhớ. Bộ nhớ gì? Chính là bộ nhớ của server.
<?php include(“class_lib.php”); ?> <?php $ku_tin = new person(); ?> |
Lưu ý: Biến $ku_tin trở thành một thể hiện tham chiếu tới đối tượng person. Tôi có thể gọi $ku_tin là một “xử lý” bởi vì chúng ta sẽ sử dụng $ku_tin để điều khiển và sử dụng đối tượng person.
Nếu bạn chạy code bây giờ, thì bạn sẽ không thấy bất kỳ cái gì hiễn thị ra trang của bạn. Lý do là chúng ta không có bảo PHP làm bất kỳ cái gì với đối tượng chúng ta vừa tạo …
Step 9:
Keyword ‘new’
Để tạo một đối tượng của một class, bạn cần sử dụng từ khóa ‘new’.
Khi tạo/khởi tạo một class, bạn có thể chọn thêm dấu ngoặc tới tên class, như tôi làm ví dụ dưới.
Để rõ ràng, bạn có thể thấy code dưới, tôi sẽ tạo nhiều đối tượng từ cùng một class.
<?php include(“class_lib.php”); ?> <?php $ku_tin = new person(); $ken = new person; ?> |
Lưu ý: Khi tạo một đối tượng, không để dấu nháy vào tên class.
EX:
$ku_tin = new ‘person’;
… sẽ ban tặng cho bạn một lổi (error).
Step 10:
Set các thuộc tính đối tượng.
Bây giờ chúng ta đã khởi tạo 2 đối tượng ‘person’ khác nhau. Chúng ta có thể set thuộc tính của chúng bằng việc sử dụng các phương thức chúng ta đã tạo.
Vui long nhớ rằng mặc dù cả hai đối tượng person ($ku_tin và $ken) đều dựa trên class ‘person’, nhưng chúng là các đối tượng hoàn toàn khác nhau.
<?php include(“class_lib.php”); ?> <?php $ku_tin = new person(); $ken = new person; $ku_tin->set_name(“Tran Ku Tin”); $ken->set_name(“Do Su Ken”); ?> |
Step 11:
Truy cập dữ liệu của đối tượng
Bây giờ chúng ta sử dụng phương thứ get để truy cập dữ liệu chứa bên trong các đối tượng.
Khi truy cập các phương thức và thuộc tính của class, bạn sử dụng ký hiệu ->.
<?php include(“class_lib.php”); ?> <?php $ku_tin = new person(); $ken = new person; $ku_tin->set_name(“Tran Ku Tin”); $ken->set_name(“Do Su Ken”); echo “Ku Tin full name: ” . $ku_tin->get_name(); echo “Ken full name: ” . $ken->get_name(); ?> |
Lưu ý: ký hiệu (->) không giống như toán tử được sử dụng trong mảng kết hợp là : => .
Xin chúc mừng: bạn đã đi được nữa bài học này rồi. Tôi nghĩ chúng ta nên làm 1 ly café hoặc một ít trà đường, mạnh nữa là chơi vài lon bia =)).
Tổng kết cho bài học này, bạn đã :
- Thiết kế một class PHP
- Tạo 2 đối tượng dựa vào class của bạn
- Insert dữ liệu vào đối tượng của bạn
- Lấy dữ liệu từ các đối tượng của bạn
Bây giờ là khoảng thời gian tuyệt vời để bạn ghi ra code và xem nó hoặc động trong trang PHP của bạn nhé.
Bài kế tiếp chúng ta sẽ đi nốt các step còn lại từ step 12 –> 22.