Lớp và đối tượng cơ bản
Một ví dụ đơn giản để bắt đầu:
<?php
// Tạo một lớp
class Pet {
public $ten;
public $tuoi;
public $mau_sac;
}
// Tạo một đối tượng mèo
$pet1 = new Pet;
$pet1->ten = "Nhung";
$pet1->tuoi = 5;
$pet1->mau_sac = "trắng";
// Tạo thêm một đối tượng mèo
$pet2 = new Pet;
$pet2->ten = "Tung";
$pet2->tuoi = 3;
$pet2->mau_sac = "đen";
// Xuất thông tin hai con mèo
if ($pet1->ten == "Nhung") {
echo $pet1->ten . "||" . $pet1->tuoi . "||" . $pet1->mau_sac . '<br/>';
}
if ($pet2->ten == "Tung") {
echo $pet2->ten . "||" . $pet2->tuoi . "||" . $pet2->mau_sac;
}
?>
Tóm tắt vài điểm chính:
- Lớp là khái niệm trừu tượng, đại diện cho một nhóm đối tượng.
- Đối tượng là thực thể cụ thể của một lớp.
- Lớp là mẫu thiết kế, còn đối tượng là các thực thể cụ thể từ mẫu đó.
Tồn tại trong bộ nhớ của đối tượng
Cách tồn tại của đối tượng trong bộ nhớ có thể được minh họa qua đoạn mã sau:
<?php
class Nguoi {
public $ho_ten;
public $tuoi;
}
$ng1 = new Nguoi();
$ng1->ho_ten = "Hong";
$ng1->tuoi = 20;
$ng2 = $ng1;
echo $ng1->ho_ten . '<br/>';
echo $ng2->tuoi . '<br/>';
?>
Chức năng của hàm khi nhận đối tượng như thế nào? Hãy xem qua đoạn mã dưới đây:
<?php
class Nguoi {
public $ho_ten;
public $tuoi;
}
$ng1 = new Nguoi();
$ng1->ho_ten = "Hong";
$ng1->tuoi = 20;
function kiem_tra(&$ng) {
$ng->ho_ten = "Lon";
}
kiem_tra($ng1);
echo $ng1->ho_ten . '<br/>';
?>
Hàm khởi tạo
Hàm khởi tạo (constructor) là gì? Dưới đây là một ví dụ:
<?php
class Nguoi {
public $ho_ten;
public $tuoi;
function __construct($ht, $t) {
$this->ho_ten = $ht;
$this->tuoi = $t;
echo "Đây là hàm khởi tạo <br/>";
}
}
$ng1 = new Nguoi("Cute", 18);
echo $ng1->ho_ten . '<br/>';
echo $ng1->tuoi . '<br/>';
?>
Lưu ý rằng $this rất quan trọng để trỏ đến thuộc tính của đối tượng hiện tại.
Hàm hủy
Hàm hủy (destructor) sẽ được gọi khi tất cả các tham chiếu đến đối tượng bị xóa hoặc khi đối tượng bị phá hủy rõ ràng. Ví dụ:
<?php
class Nguoi {
public $ho_ten;
public $tuoi;
function __construct($ht, $t) {
$this->ho_ten = $ht;
$this->tuoi = $t;
}
function __destruct() {
echo $this->ho_ten . ' Xóa tài nguyên <br/>';
}
}
$ng1 = new Nguoi("Vu", 25);
$ng2 = new Nguoi("Phong", 30);
?>
Khi chương trình chạy, bạn sẽ thấy hàm hủy tự động được gọi.
Biến tĩnh và phương thức tĩnh
Biến tĩnh là biến chia sẻ giữa các đối tượng. Ví dụ:
<?php
class TreEm {
public static $so_luong = 0;
public $ten;
function __construct($ten) {
$this->ten = $ten;
self::$so_luong += 1;
echo $this->ten . " gia nhập trò chơi <br/>";
}
}
$tre1 = new TreEm("Beo");
$tre2 = new TreEm("Bun");
$tre3 = new TreEm("Bo");
echo 'Tổng cộng có ' . TreEm::$so_luong . ' trẻ em <br/>';
?>
Đóng gói, kế thừa và đa hình
Ba đặc trưng cơ bản của lập trình hướng đối tượng bao gồm đóng gói, kế thừa và đa hình.
Ví dụ về kế thừa:
<?php
class HocSinh {
public $ten;
public $tuoi;
public $ma_hoc_sinh;
function hien_thi_thong_tin($ten, $tuoi) {
echo $this->ten = $ten . "||" . $this->tuoi = $tuoi;
}
}
class SinhVienDaiHoc extends HocSinh {
function hoc() {
echo "Sinh viên đang học tập";
}
}
$sv = new SinhVienDaiHoc();
$sv->hien_thi_thong_tin("Nam", 20);
$sv->hoc();
?>
Phương thức trừu tượng và giao diện
Giao diện giúp định nghĩa các hành vi mà một lớp phải tuân theo. Ví dụ:
<?php
interface iThietBi {
function bat_dau();
function tat_di();
}
class MayAnh implements iThietBi {
function bat_dau() {
echo "Máy ảnh bắt đầu hoạt động";
}
function tat_di() {
echo "Máy ảnh dừng hoạt động";
}
}
$may_anh = new MayAnh();
$may_anh->bat_dau();
$may_anh->tat_di();
?>