Lập trình hướng đối tượng với php


tự học php cơ bản 23/06/2015 Cùng chuyên mục

Tìm hiểu về lập trình đối tượng trong php: cách thức khai báo lớp (class) - phương thức khởi tạo (construct) - phạm vi truy xuất (access modifiter), kế thừa (inherit) và đa hình (polymophic),...

ĐỐI TƯỢNG (OBJECT) ?

Đối tượng là "một cái gì đó" có ý nghĩa cho vấn đề chúng ta đang quan tâm.  Phục vụ cho 2 mục đích:
- Giúp hiểu rõ thế giới thực
- Cung cấp cơ sở cho việc cài đặt


Các đối tượng có các đặc tính tương tự nhau được gom chung lại thành lớp đối tượng ( class ). Ví dụ, Người (Person) là một lớp đối tượng. Một lớp đối tượng được đặc trưng bằng các thuộc tính (properties) và các hoạt động - hành vi (method).

Một thuộc tính là một giá trị dữ liệu cho mỗi đối tượng trong lớp. Tên, Tuổi, Cân nặng là các thuộc tính của Người.
Một thao tác - hành động - hành vi là một hàm hay một phép biến đổi (method) có thể áp dụng vào hay áp dụng bởi các đối tượng trong lớp.

class Person
Methods:
set_name($name);
get_name();
Properties:
$name

Sơ đồ lớp Person

KHAI BÁO LỚP:

Để khai báo lớp trong php chúng ta sử dụng từ khóa class, với cú pháp như sau: 

class Class_name
{
... 
// List of methods...
...
// List of properties...
}

Lưu ý: tên lớp viết hoa

Ví dụ: khai báo lớp Person - với thuộc tính name (tên), với 2 phương thức: set_name (đặt tên), get_name(): lấy ra tên

class Person
{
   private $name;
   public funtion set_name($name)
  {
     $this->name = $name;
  }
  public function get_name()
  {
      return $this->name;
  }
}

 TỪ KHÓA NEW VÀ PHƯƠNG THỨC KHỞI TẠO:

Phương thức khởi tạo có tên là __construct(), có thể có tham số hoặc không tham số. Phương thức khởi tạo sẽ tự động được gọi khi tạo một thể hiện của đối tượng bằng từ khóa new.

Ví dụ: Lớp Person với phương thức khởi tạo không tham số - phương thức khởi tạo có tham số sẽ đặt tên cho đối tượng. (lưu ý 2 dấu _ trước từ khóa construct()

class Person
{
	//khai báo thuộc tính
	private $name = 'your name';
	//khai báo phương thức khởi tạo không tham số
	public function __construct()
	{
		
	}
	//khai báo phương thức khởi tạo có tham số
	public function __construct($name)
	{
		$this->set_name($name);
	}
	public funtion set_name($name)
	{
		$this->name = $name;
	}
	public function get_name()
	{
		return $this->name;
	}
}
//tạo đối tượng với phương thức khởi tạo không tham số
$nam =  new Person(); 
$nam->set_name('nam');
echo $name->get_name(); //kết quả: nam
//tạo đối tượng với phương thức khởi tạo có tham số
$binh = new Person('binh'); 
echo $binh->get_name(); //kết quả: binh

 PHƯƠNG THỨC HỦY BỎ:

Phương thức hủy bỏ có tên là __destruct(), sẽ được gọi khi hủy đối tượng.
Ví dụ:

class MyClass
{
	function __destruct()
	{
		echo 'Destroy object';
	}
}
$obj = new MyClass();
$obj = NULL; //kết quả: Destroy object

PHẠM VI TRUY XUẤT:

Tương tự như C++, PHP có các từ khóa để đặt phạm vi truy xuất cho thuộc tính và phương thức có cùng ý nghĩa:
- public: có thể truy xuất từ tất cả các lớp khác và lớp đó.
- protected: chỉ có thể truy xuất từ các lớp đó và lớp con.
- private: chỉ có thể truy xuất từ lớp đó
- final: nếu một class được khai báo với từ khóa final, nó sẽ không được kế thừa

Chúng ta thường sử dụng các từ khóa public, private... để tạo phạm vi truy xuất cho các thuộc tính (property)
hoặc các phương thức (method)...theo cú pháp <phạm vi truy xuất> <thuộc tính|method>

Ví dụ: khai báo lớp Person

class Person
{
   private $secrect = "điều bí mật";
   public $name = "nam";
   public funtion set_name($name)
  {
     $this->name = $name;
  }
  public function get_name()
  {
      return $this->name;
  }
  public function get_secrect()
 {
     echo $this->secrect;
 }
private function set_secrect($new_secrect)
{
  $this->secrect = $new_secrect;
}
}
$nam = new Person();
echo $nam->nam; //xuất ra nam
// echo $nam->secrect; //báo lỗi
//echo $nam->set_secrect("bí mật khác"); //báo lỗi
echo $nam->get_secrect();
echo $nam->get_name();

KẾ THỪA

Cú pháp:

 class <tên lớp con> extends <tên lớp cha>

Ví dụ về kế thừa (inherit) và đa hình (polymophic)

Tạo  Lop_con kế thừa từ  Lop_cha. Để sử dụng phương thức khởi tạo từ lớp cha, dùng phương thức: parent::_construct()

class Person
{  
   public $name = "nam";
   public funtion set_name($name)
  {
     $this->name = $name;
  }
  public function get_name()
  {
      return "Nguoi: ".$this->name;
  }
}
class Man exntends Person
{
	public $name = "Nguoi dan ong";   
	//ghi đè lên phương thức kế thừa của lớp cha
	public function get_name()
	{
		  return "Nguoi dan ong: ".$this->name;
	}
	
}
class Women exntends Person
{
	//ghi đè lên phương thức kế thừa của lớp cha
	public $name = "Nguoi dan ba";   
	  public function get_name()
	  {
		  return "Nguoi dan ba: ".$this->name;
	  }	
}
$nguoi = new Person();
$nguoi->set_name("Viet Nam");
print $nguoi->get_name();
$huy = new Man();
//kế thừa phương thức set_name() từ lớp cha
$huy->set_name("Huy");
//có kiểu hình riêng của mình khác với lớp cha
print $huy->get_name();
$ha = new Women();
//kế thừa phương thức set_name() từ lớp cha
$ha->set_name("Ha");
/*có kiểu hình riêng của mình khác với lớp cha 
khác với lớp kế thừa khác*/
print $ha->get_name();

Tổng kết bài học

Bài này, giới thiệu cơ bản lập trình hướng đối tượng trong php. Để học được tốt bạn nên nắm vững lý thuyết lập trình hướng đối tượng, nhất là đã cài đặt bên C++, chuyển sang php - chỉ là sự sai khác về cú pháp. 


Bài cùng chuyên mục:



Bài liên quan:



Bình luận:


php