Kế thừa là gì trong PHP

Kế thừa là gì trong PHP

Kế thừa là gì trong PHP

 

Kế thừa là gì trong PHP là một khái niệm quan trọng trong lập trình hướng đối tượng, và trong PHP, nó đóng vai trò quan trọng trong việc tái sử dụng mã nguồn và tạo ra các cấu trúc linh hoạt và dễ bảo trì. Trong bối cảnh này, chúng ta sẽ khám phá khái niệm "Kế thừa là gì trong PHP" để hiểu rõ hơn về cách nó hoạt động, lợi ích mà nó mang lại và cách sử dụng nó hiệu quả trong việc phát triển ứng dụng PHP. Hãy cùng nhau bắt đầu hành trình tìm hiểu về kế thừa và cách nó nâng cao sức mạnh của mã nguồn PHP của bạn.

1. Khái niệm kế thừa là gì ?

Khái niệm "kế thừa" trong lập trình hướng đối tượng PHP đặc trưng cho việc tạo ra mối quan hệ linh hoạt giữa các lớp. Khi một lớp được dẫn xuất từ một lớp khác, chúng ta nói rằng lớp đó là "lớp con," trong khi lớp gốc được gọi là "lớp cha." Quá trình này giúp chia sẻ và tái sử dụng mã nguồn một cách hiệu quả.

Lớp con thừa hưởng tất cả các thuộc tính và phương thức của lớp cha, nhất là những thành phần có phạm vi truy cập là public và protected. Điều này tạo điều kiện cho việc kế thừa thông tin và chức năng từ lớp cha mà không cần phải viết lại mã nguồn. Ngoài ra, lớp con cũng có khả năng mở rộng và thêm vào các thuộc tính và phương thức mới tùy theo yêu cầu cụ thể của nó.

Khi khai báo một lớp con, từ khóa extends được sử dụng để chỉ ra mối quan hệ kế thừa với lớp cha. Cú pháp đơn giản này là cầu nối giữa lớp con và lớp cha, mở ra khả năng sử dụng lại mã nguồn và tạo ra cấu trúc linh hoạt trong quá trình phát triển ứng dụng PHP.

Tóm lại, kế thừa không chỉ là một khái niệm cơ bản trong PHP mà còn là công cụ quan trọng giúp tăng cường tính linh hoạt và sự hiệu quả của mã nguồn trong lập trình hướng đối tượng.

- Một lớp con sẽ được khai báo bằng từ khóa extends với cú pháp như sau:

class TênLpCon extends TênLpCha{
	//some code
}

- Lớp SinhViên được kế thừa từ lớp CôngDân, cho nên nó sẽ thừa hưởng các thuộc tính & phương thức từ lớp CôngDân. Ngoài ra, lớp SinhViên còn có một phương thức riêng là message().


	class CongDan{
		public $name;
		public $year;
		public function __construct($input_name, $input_year){
			$this->name = $input_name;
			$this->year = $input_year;
		}
		public function intro(){
			echo "Tôi tên là {$this->name}, sinh năm {$this->year}";
		}
	}
	class SinhVien extends CongDan{
		public function message(){
			echo "Chào các bạn!
"
; } } $nhan = new SinhVien("Nguyễn Thành Nhân",1993); $nhan->message(); $nhan->intro(); ?>

2. Phạm vi truy cập protected

Phạm vi truy cập protected

Phạm vi truy cập protected

 

Trước đó, tôi đã giới thiệu ba từ khóa quan trọng: public, protected và private, chúng được sử dụng để xác định phạm vi truy cập của các thuộc tính và phương thức trong lập trình hướng đối tượng.

Tính đến thời điểm đó, tôi đã cung cấp một sơ lược về public và private thông qua việc giải thích chi tiết bằng các ví dụ minh họa. Tuy nhiên, từ khóa protected không được đề cập một cách chi tiết. Lý do cho điều này là vì trong bài giảng đó, các bạn chưa có hiểu biết về khái niệm kế thừa.

Các từ khóa public, protected và private đóng vai trò quan trọng trong việc quản lý quyền truy cập đối với thành phần của lớp. Cụ thể, public cho phép truy cập từ mọi nơi, private chỉ cho phép truy cập từ bên trong lớp đó, và protected giữ cho phép truy cập từ bên trong lớp và các lớp con.

Nhưng như đã nêu trước đó, protected sẽ được mở rộng chi tiết trong bài giảng sau khi các bạn đã có kiến thức cơ bản về kế thừa. Điều này nhấn mạnh sự quan trọng của việc hiểu biết về các khái niệm liên quan và sự phát triển theo từng bước trong quá trình học lập trình hướng đối tượng.

- Sau đây là ví dụ để các bạn hiểu rõ hơn về phạm vi truy cập protected: 
  • Ví dụ 1:
    
    	class CongDan{
    		public $name;
    		public $year;
    		public function __construct($input_name, $input_year){
    			$this->name = $input_name;
    			$this->year = $input_year;
    		}
    		protected function intro(){
    			echo "Tôi tên là {$this->name}, sinh năm {$this->year}";
    		}
    	}
    	class SinhVien extends CongDan{
    		public function message(){
    			echo "Chào các bạn!
    "
    ; } } $nhan = new SinhVien("Nguyễn Thành Nhân",1993); $nhan->message(); $nhan->intro(); //ERROR (phương thức intro là protected, nó chỉ có thể được gọi bên trong lớp CongDan, hoặc được gọi bên trong các lớp được kế thừa từ lớp CongDan, điển hình như lớp SinhVien) ?>
  • Ví dụ 2: 

	class CongDan{
		public $name;
		public $year;
		public function __construct($input_name, $input_year){
			$this->name = $input_name;
			$this->year = $input_year;
		}
		protected function intro(){
			echo "Tôi tên là {$this->name}, sinh năm {$this->year}";
		}
	}
	class SinhVien extends CongDan{
		public function message(){
			echo "Chào các bạn!
"
; $this->intro(); //OK (phương thức intro được gọi bên trong lớp SinhVien) } } $nhan = new SinhVien("Nguyễn Thành Nhân",1993); $nhan->message(); ?>
 

3. Ghi đè phương thức

- Các phương thức được kế thừa từ lớp cha có thể được ghi đè bằng cách khai báo lại bên trong lớp con.


	class CongDan{
		public $name;
		public $year;
		public function __construct($input_name, $input_year){
			$this->name = $input_name;
			$this->year = $input_year;
		}
		protected function intro(){
			echo "Tôi tên là {$this->name}, sinh năm {$this->year}";
		}
	}
	class SinhVien extends CongDan{
		public $gender;
		public function __construct($input_name, $input_year, $input_gender){
			$this->name = $input_name;
			$this->year = $input_year;
			$this->gender = $input_gender;
		}
		public function intro(){
			echo "Tôi tên là {$this->name}, sinh năm {$this->year}, giới tính {$this->gender}";
		}
	}
	$nhan = new SinhVien("Nguyễn Thành Nhân",1993,"Nam");
	$nhan->intro();
?>

4. Từ khóa final

- Từ khóa final dùng để ngăn chặn việc kế thừa lớp, hoặc ngăn chặn việc ghi đè lên phương thức.

- Không lớp nào có thể kế thừa lớp CongDan (việc định nghĩa lớp SinhVien kế thừa lớp CongDan sẽ xảy ra lỗi)


	final class CongDan{
		public $name;
		public function __construct($input_name){
			$this->name = $input_name;
		}
		public function intro(){
			echo "Tôi tên là {$this->name}";
		}
	}
	class SinhVien extends CongDan{ //ERROR
		//some code
	}
?>

- Phương thức intro() sẽ không thể bị ghi đè bên trong các lớp con.


	class CongDan{
		public $name;
		public function __construct($input_name){
			$this->name = $input_name;
		}
		final public function intro(){
			echo "Tôi tên là {$this->name}";
		}
	}
	class SinhVien extends CongDan{
		public function intro(){ //ERROR
			echo "Chào các bạn, tôi tên là {$this->name}";	
		}
	}
?>

FAQ - Câu hỏi thường gặp

Q1: Kế thừa là gì trong PHP và tại sao nó quan trọng? A1: Trong PHP, kế thừa là khái niệm cho phép một lớp con thừa hưởng tất cả các thuộc tính và phương thức của một lớp cha. Điều này giúp tái sử dụng mã nguồn và tạo ra mối quan hệ linh hoạt giữa các lớp, làm cho mã nguồn trở nên dễ bảo trì và mở rộng.

Q2: Tại sao chúng ta cần sử dụng từ khóa protected trong kế thừa? A2: Từ khóa protected trong PHP cho phép truy cập từ bên trong lớp và các lớp con. Điều này là quan trọng khi muốn bảo vệ một phần của lớp để ngăn chặn truy cập từ bên ngoài, nhưng vẫn muốn cho phép lớp con sử dụng nó.

Q3: Làm thế nào để khai báo một lớp con trong PHP? A3: Để khai báo một lớp con trong PHP, bạn sử dụng từ khóa extends sau tên lớp con, theo sau là tên lớp cha. Ví dụ: class Con extends Cha. Điều này thiết lập mối quan hệ kế thừa giữa hai lớp.

Q4: Lợi ích nổi bật của việc sử dụng kế thừa trong phát triển ứng dụng PHP là gì? A4: Sử dụng kế thừa trong PHP giúp tăng cường tái sử dụng mã nguồn, giảm lặp lại và làm cho mã nguồn trở nên dễ bảo trì. Nó cũng tạo ra cấu trúc linh hoạt, giúp ứng dụng dễ mở rộng và thích ứng với sự thay đổi trong yêu cầu.

 
 
 
 
 

Nội dung bài viết:

    Hãy để lại thông tin để được tư vấn

    Họ và tên không được để trống

    Số điện thoại không được để trống

    Số điện thoại không đúng định dạng

    Vấn đề cần tư vấn không được để trống

    comment-blank-solid Bình luận

    084.696.7979 19003330 Báo giá Chat Zalo