Static classes trong php

Vì class có thể được khởi tạo nhiều lần, giá trị của một class là duy nhất đối với instance/object, chứ không phải là class. Điều này cũng có nghĩa là bạn không thể sử dụng method hoạc variable mà không khởi tạo class, nhưng vẫn có một ngoại lệ. Cả method và variable trong class đều được cho là static, có nghĩa là chúng có thể được sử dụng mà không instantiating lớp đầu ticần khởi tạo lớpên. Nếu làm thế này thì variable có thể được truy cập mà không cần class cụ thể, nên sẽ chỉ có một phiên bản duy nhất của variable này. Vấn đề của static method là sẽ không thể truy cập vào các variable và method khác vì không có class cụ thể.

Trong phần trước, chúng tôi đã viết User class. Chúng ta sẽ mở rộng nó với một số static function để xem sự khác biệt:

name ." is ".$this->age ." years old";
    }
    
    publicstaticfunction ValidatePassword($password)
    {
        if(strlen($password) >= self::$minimumPasswordLength)
            returntrue;
        elsereturnfalse;
    }
}

$password="test";
if(User::ValidatePassword($password))
    echo"Password is valid!";
elseecho"Password is NOT valid!";
?> 

Chúng ta đã cho thêm một static variable vào class, $minimumPasswordLength được đặt là 6 thì chúng ta có một static function để kiểm tra khi nào dòng password là hợp lệ.

Như bạn thấy, để truy cập vào static function từ static method, chúng tôi prefix nó với từ khóa. Vì nó chỉ hoạt động trong class, do đó, để gọi function ValidatePassword () từ bên ngoài class, chúng tôi sử dụng tên của class. Bạn cũng sẽ nhận thấy rằng việc tiếp cận các static member yêu cầu double-colon operator -> operator, nhưng cũng không có nhiều khác biệt lắm.

Class constants

Constant là một variable không thể thay dổi. Khi bạn tạo constant, bạn cho nó một value và valua này không bao giờ thay đổi.Bình thường thì các variable khác dễ sử dụng hơn, nhưng có có những lúc vẫn cần đến constant, ví dụ như để nhắc nhở lập trình viên (bản thân hay những người khác) là variable nay không được phép thay đổi trong lúc chạy trương trình.

Class constant cũng giống như constant bình thường, có điều  họ được gọi trong class vì vậy chỉ truy cập qua một class nhất định. Giống như static member, bạn dùng double-colon operator để vào class constant. Ví dụ:

Như bạn thấy, qua trình cũng như tạo variable vậy, chỉ có điều là không cần access modifier – một constant luôn luôn có sẵn. Để dùng constant, chúng ta viết tên của class, dùng double-colon operator rồi viết tên của constant.

The “final” keyword

Trong các phần trước chúng ta đã biết cách inherit từ class này sang class kia, viết lại function đã được inherit từ class khác. Nhưng trong một số trường hợp, bạn không muốn class khác inherit, hoặc không muốn function được inherit bị sửa chữa. Nếu vậy, bạn có thể dùng từ khóa ‘final’ và PHP sẽ bão lỗi nếu ai đó sưa chửa final class hoạc final function của bạn.

Final class sẽ giống như này:

finalclass Animal
{
    public$name;
}

Và class với final function sẽ giống thế này:

class Animal

class Animal
{
    finalpublicfunction Greet()
    {
        return"The final word!";    
    }
}

Bạn có thể gộp cả hai hoạc sử dụng riêng lẻ như ví dụ trên.

Bài dịch từ PHP5 Tutorial