Web Cơ Bản

Tìm hiểu chức năng, cách sử dụng Interface trong PHP

Interface là gì ?

- Đối với lập trình hướng đối tượng trong PHP, Interface cho phép bạn chỉ định những phương thức mà một lớp nên triển khai.

- Interface giúp bạn dễ dàng sử dụng nhiều lớp khác nhau theo cùng một cách.

- Các Interface sẽ được khai báo bằng từ khóa interface.

<?php
	interface InterfaceName{
		public function method1();
		public function method2($name, $color);
		public function method3() : string;
	}
?>

So sánh Interface với Abstract Class (lớp trừu tượng)

- Interface và “lớp trừu tượng” tương đối giống nhau. Tuy nhiên, chúng cũng có một số điểm khác biệt như sau:

  • Interface không được phép có các thuộc tính, trong khi lớp trừu tượng có thể có.
  • Các phương thức trong Interface có phạm vi truy cập mặc định là public & bắt buộc phải là public (việc sử dụng từ khóa public khi khai báo phương thức là không cần thiết), trong khi lớp trừu tượng có thể là public hoặc protected.
  • Tất cả các phương thức trong Interface đều mặc định là trừu tượng, bạn không cần dùng & không thể dùng từ khóa abstract khi khai báo nó, bạn cũng không thể viết mã cho nó.
  • Các lớp có thể kế thừa từ một lớp khác, đồng thời có thể triển khai một Interface.

Cách sử dụng Interface

- Để triển khai một Interface cho lớp thì ta sử dụng từ khóa implements.

- Lưu ý: Khi triển khai một Interface cho lớp, các bạn cần phải khai báo lại tất cả các phương thức trong Interface cho lớp.

<?php
	interface Animal{
		function makeSound();
	}
	class Cat implements Animal{
		public function makeSound(){
			echo "meo meo";
		}
	}
	$animal = new Cat();
	$animal->makeSound();
?>
<?php
	interface Animal{
		function makeSound();
	}
	class Cat implements Animal{
		public function makeSound(){
			echo "meo meo";
		}
	}
	class Dog implements Animal{
		public function makeSound(){
			echo "gâu gâu";
		}
	}
	class Mouse implements Animal{
		public function makeSound(){
			echo "chít chít";
		}
	}
	$cat = new Cat();
	$dog = new Dog();
	$mouse = new Mouse();
	$animals = array($cat, $dog, $mouse);
	foreach ($animals as $animal) {
		$animal->makeSound();
		echo "<br>";
	}
?>

Ví dụ tham khảo thêm

- Lớp About_me vừa kế thừa lớp CongDan, đồng thời triển khai một Interface.

<?php
	class CongDan{
		public $name;
		public $year;
		function __construct($input_name, $input_year){
			$this->name = $input_name;
			$this->year = $input_year;
		}
	}
	interface Intro{
		function mess();
	}
	class About_me extends CongDan implements Intro{
		public function mess(){
			echo "Chào bạn, tôi là {$this->name}, sinh năm {$this->year}, tôi là một lập trình viên";
		}
	}
	$me = new About_me("Nhân", 1993);
	$me->mess();
?>