Trong lớp có thể khai báo các thuộc tính tĩnh (static property)
và các phương thức tĩnh (static method) bằng cách dùng từ khóa static
, các thành viên tĩnh này vài trường hợp là
một đặc tính hữu dụng trong PHP.
Phương thức / thuộc tính tĩnh (static) thì nó có thể truy cập trực tiếp
thông qua tên lớp với toán tử phân giải phạm vi truy cập ::
,
không cần phải tạo ra đối tượng lớp, trong phương thức tính không thể dùng
$this (không thể truy cập các loại thành viên không phải tĩnh).
Thuộc tính tĩnh (static property)
Một thuộc tính khai báo là static
có thể truy cập bằng ký hiệu phạm vi ::
class ClassA { // $a_property khai báo là tính (static) public static $a_property; } // Truy cập thuộc tính tĩnh không cần phải tạo đối tượng lớp ClassA::$a = 5; echo ClassA::$a;
Từ khóa self và parent trong PHP
Bên trong một phương thức của lớp, bạn có thể sử dụng từ khóa self::property
,
và để truy cập tới thành viên tĩnh lớp cha thì dùng
parent::property
class ParentClass { public static $property_a; } class ChildClass extends ParentClass { public static $property_b; function testFunction() { // Truy cập thành viên tĩnh self::$property_b = 3; parent::$property_a = 5; } }
Sử dụng thuộc tính tĩnh là cách để lưu giữ/trao đổi giá trị của một biến thông qua các đối tượng khác nhau. Ví dụ đêm số lần mà một lớp được dùng để khởi tạo đối tượng
class Test { public static $count = 0; public function __construct() { self::$count += 1; echo self::$count; } } $test1 = new Test(); //In ra 1 $test2 = new Test(); //In ra 2
Khai báo phương thức tĩnh
Phương thức tĩnh khai báo giống phương thức thông thường nhưng có thêm từ khóa static.
Với hàm tĩnh bạn không sử dụng $this
để truy cập các thành viên khác được.
class TestStaticMethod { // test là phương thức tĩnh public static function test($pr1, $pr2) { echo $pr1.'-'.$pr2; } } // Truy cập phương thức tĩnh (không cần đối tạo đối tượng lớp) TestStaticMethod::test('Học', 'PHP');
Các phương thức tĩnh được khai báo trong lớp chủ yếu là bổ xung các tiện tích, các trợ giúp phục vụ cho hoạt động của lớp. Các phương thức này hoạt động mà không cần truy cập vào dữ liệu hay các phương thức khác của lớp.