Truy cập các thành phần của lớp bằng $this.. Khai báo một lớp Khai báo lớp: class tên_lớp { //khai báo thuộc tính //khai báo phương thức //sử dụng private hay public và protec
Trang 1LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
TRONG PHP
Giảng viên phụ trách:
Nguyễn Hoàng Tùng
Bộ môn Tin học Email: nhoangtung@agu.edu.vn
Trang 2Nội dung chính của phần này
Giới thiệu
Khai báo một lớp
Thuộc tính, phương thức
Truy cập các thành phần của lớp bằng $this
Giải quyết vấn đề không cho phép overloading trong PHP
Hàm tạo ( construct)
Hàm hủy ( destruct)
Thành phần static
Kế thừa (extends)
Hàm lấy tên lớp đang thực thi autoload
20/08/2012 Công nghệ Web và Ứng dụng 2
Trang 3Giới thiệu
OOP chỉ có trong phiên bản từ PHP 5.x về sau
Đặc điểm OOP trong PHP 5.x: Không cho phép đa kế thừa!
20/08/2012 Công nghệ Web và Ứng dụng 3
Trang 4Khai báo một lớp
Khai báo lớp:
class tên_lớp
{
//khai báo thuộc tính
//khai báo phương thức
//sử dụng private hay public và protected để xác định phạm vi
}
khai báo tính rõ ràng với các từ khoá tương ứng là public,
protected và private
Trang 5Khai báo một lớp
Không khai báo lớp:
Trong nhiều file,
Trong nhiều khối lệnh,
Bắt đầu bằng (đối với tên lớp và tên phương thức)
Sử dụng:
Tạo biến đối tượng:
• $tên_object = new tên_class([giá trị khởi tạo]);
• $sv = new SinhVien("Nguyen Hoang Tung");
Sử dụng thuộc tính, phương thức:
• $tên_object->tên_thuộc_tính;
• $tên_object->tên_phương_thức([tham số]);
Trang 6Khai báo một lớp
Ví dụ đơn giản:
<?php
class SinhVien
{
private $mSSV = "";
private $hoTen = "";
public function SinhVien($mS, $hTen) //Hàm dựng
{
$this->mSSV = $mS;
$this->hoTen = $hTen;
} }
$sv = new SinhVien("DTH051187", "Hoang Tung");
echo "Mã số SV: ".$sv->mSSV.", Họ tên: ".$sv->hoTen;
?>
Nên khởi gán giá trị ban đầu
Trang 7Biến $this
Khi sử dụng các biến thành phần, bắt buộc phải sử dụng từ
khóa $this
20/08/2012 Công nghệ Web và Ứng dụng 7
<?php
class SinhVien
{
private $mSSV = "";
private $hoTen = "";
public function SinhVien($mS, $hTen) //Hàm dựng
{
$this->mSSV = $mS;
$this->hoTen = $hTen;
$this->$mSSV = $mS;
$this->$hoTen = $hTen;
} }
?>
Sai!
Đúng!
Trang 8Nạp chồng hàm (Overloading)
Không cho phép nạp chồng hàm
Để giải quyết vấn đề này, ta sử dụng hàm có tham số mặc định
20/08/2012 Công nghệ Web và Ứng dụng 8
<?php
class SinhVien
{
private $mSSV = "";
private $hoTen = "";
public function SinhVien($mS = "", $hTen = "")
{
$this->mSSV = $mS;
$this->hoTen = $hTen;
} }
?>
Trang 9Hàm tạo (Contructor)
Có 2 loại hàm tạo:
Hàm tạo thông thường: Tên hàm giống tên lớp
Hàm tạo tự động thực thi: construct()
Khi cài đặt, chỉ sử dụng một trong 2 loại hàm tạo trên
20/08/2012 Công nghệ Web và Ứng dụng 9
Trang 10Hàm hủy (Destructor)
destruct()
Thường được dùng để dọn dẹp, đóng kết nối tới CSDL
20/08/2012 Công nghệ Web và Ứng dụng 10
Trang 11Đối tượng static
Lưu ý, không áp dụng static đối với hàm tạo
20/08/2012 Công nghệ Web và Ứng dụng 11
<?php
class SinhVien
{
private static $mSSV = "";
private $hoTen = "";
public function SinhVien($mS = "", $hTen = "")
{
self::$mSSV = $mS;
$this->hoTen = $hTen;
} }
?>
Trang 12Đối tượng static
Lưu ý, không cần sử dụng new để khai báo đối tượng
20/08/2012 Công nghệ Web và Ứng dụng 12
<?php
class SinhVien
{
private static $mSSV = "";
private static $hoTen = "";
public static function HienThi()
{
echo "MSSV: " self::$mSSV;
echo "Họ tên: " self::$hoTen;
} }
SinhVien::HienThi();
?>
Trang 13Kế thừa
Dùng từ khóa extends để thể hiện kế thừa:
20/08/2012 Công nghệ Web và Ứng dụng 13
<?php
class SinhVienTH extends SinhVien {
private $soTinChi = 0;
public function SinhVienTH($mS, $hTen, $sTC) {
parent::SinhVien($mS, $hTen);
$this->soTinChi = $sTC;
}
public function HienThi() {
parent::HienThi($mS, $hTen);
echo "Số tín chỉ: " $this->soTinChi;
} }
?>
Trang 14Hàm autoload
Hàm autoload() không phải là thành phần của lớp
Khi thực thi nó sẽ trả về tên lớp được khai báo ngay sau nó
Sử dụng rất tốt trong việc tối ưu hóa dòng lệnh
20/08/2012 Công nghệ Web và Ứng dụng 14
<?php
function autoload($className)
{
echo $className;
}
$sv = new SinhVien("DNH101234", "An");
$sv->HienThi();
$svth = new SinhVienTH("DTH101111", "Tuấn", 30);
$svth->HienThi();
?>
Trang 15Giải đáp thắc mắc
20/08/2012 Công nghệ Web và Ứng dụng 15