Web Cơ Bản

Cách khai báo, sử dụng phương thức tĩnh trong PHP

Phương thức tĩnh (static method) là gì ?

- Đối với lập trình hướng đối tượng trong PHP, “phương thức tĩnh” là loại phương thức có thể được gọi trực tiếp mà không cần phải tạo một đối tượng từ lớp chứa phương thức đó.

- Trong một lớp, phương thức tĩnh được khai báo bởi từ khóa static.

<?php
	class ClassName{
		public static function staticMethod(){
			echo "Chào cả nhà";
		}
	}
?>

- Khi muốn truy cập một phương thức tĩnh thì chúng ta sử dụng tên lớp, theo sau là cặp dấu hai chấm :: và tên phương thức tĩnh.

ClassName::staticMethod();

- Phương thức welcome() trong lớp Greeting là một phương thức tĩnh.

- Ở câu lệnh cuối cùng, các bạn thấy tôi gọi đến phương thức welcome() mà không cần phải tạo một đối tượng từ lớp Greeting.

<?php
	class Greeting{
		public static function welcome(){
			echo "Chào cả nhà";
		}
	}
	Greeting::welcome();
?>

Tìm hiểu thêm về phương thức tĩnh

- Trong một lớp có thể có cả phương thức tĩnh & phương thức không tĩnh (tức là các phương thức thông thường), một phương thức tĩnh có thể được truy cập từ một phương thức khác trong cùng lớp bằng cách sử dụng từ khóa self và dấu hai chấm ::

<?php
	class Greeting{
		public static function welcome(){
			echo "Chào cả nhà";
		}
		public function __construct(){
			self::welcome();
		}
	}
	$a = new Greeting();
?>

- Các phương thức tĩnh cũng có thể được truy cập từ các phương thức trong các lớp khác, để thực hiện được điều đó thì các phương thức tĩnh phải có phạm vi truy cập là public.

<?php
	class Greeting{
		public static function welcome(){
			echo "Chào cả nhà";
		}
	}
	class Hello{
		public function __construct(){
			Greeting::welcome();
		}
	}
	$a = new Hello();
?>

- Để truy cập một phương thức tĩnh từ lớp con, các bạn hãy sử dụng tử khóa parent bên trong lớp con. Nhưng các bạn cần phải lưu ý ở trường hợp này, phương thức tĩnh phải có phạm vi truy cập là public hoặc protected.

<?php
	class Greeting{
		protected static function welcome(){
			echo "Chào cả nhà";
		}
	}
	class Hello extends Greeting{
		public function __construct(){
			parent::welcome();
		}
	}
	$a = new Hello();
?>