1. Đặt vấn đề.
Như chúng ta biết, mỗi Class luôn có các thuộc tính và phương thức . Muốn sử dụng được các thuộc tính và phương thức trong Class. Ta phải khởi tạo đối tượng, rồi từ đối tượng đó ta truy cập đến các thuộc tính và phương thức cần sử dụng.
Nhưng giả sử, Khi ta khởi tạo hai đối tượng khác nhau với cùng một Class, thì các thao tác xử lý trên hai đối tượng đó không ảnh hưởng lẫn nhau.
Nhưng trong thực tế, đôi lúc ta muốn bất kỳ thao tác nào, từ bất kỳ đối tượng nào của Class cũng đều được lưu lại trên Class đó (dạng toàn cục). Ta sẽ sử dụng kiểu dữ liệu tĩnh.
Để các bạn hiểu rõ vấn đề trên, Chúng ta cùng tìm hiểu ví dụ sau.
#1. Demo
Kết quả ta được, khi chạy chương trình #1 Demo
Rõ ràng những thao tác của đối tượng $xe_sh đều không ảnh hưởng đến đối tượng $xe_wave khi ta không sử dụng static cho biến $_name.
Tiếp tục, ta xét ví dụ
#2. Demo
Kết quả ta được, khi chạy chương trình #2 Demo
Trong ví dụ này, khác với ví dụ #1 Demo. Rõ ràng, ở đối tượng $xe_wave, chúng ta không hềsetName() nhưng do ảnh hưởng của đối tượng $_xe_sh. Nên khi getName() ta vẫn được kết quả là Xe SH Việt. Và trong trường hợp này, ta đang sử dụng từ khóa Static cho thuộc tính $_name.
Như vậy, trong lập trình hướng đối tượng ta có thể hiểu, dữ liệu tĩnh là loại dữ liệu được sử dụng ở dạng toàn cục, dù nó được xử lý ở bất kỳ file nào trong cùng một chương trình đều được lưu lại, ta có thể gọi chúng là thuộc tính tính hoặc phương thức tĩnh. Mỗi thuộc tính tĩnh hoặc phương thức tĩnh đều có thể có các mức truy cập private, public và protected.
2. Khái niệm thuộc tính tĩnh và phương thức tĩnh.
a. Thuộc tính tĩnh là biến được khai báo trong class, có kèm theo từ khóa static. Trước từ khóa static có thể có một trong các cơ chế Public, Protected, Private
b. Phương thức tĩnh là hàm được khai báo trong class, có kèm theo từ khóa static. Trước từ khóa static có thể có một trong các cơ chế Public, Protected, Private
Ví dụ.
3. Các vấn đề liên quan.
a. Truy cập không cần khởi tạo đối tượng.
b. Truy cập bằng từ khóa SELF trong Class.
c. Không được dùng từ khóa $this.
Vì các thuộc tính và phương thức tĩnh ở dạng toàn cục, được gọi mà không cần khởi tạo nên nếu bạn dùng từ khóa $this
để gọi đến một thuộc tính hoặc phương thức tĩnh nào đó trong Class thì sẽ bị báo sai.
d. Kế thừa trong thuộc tính tĩnh và phương thức tĩnh.
Lời kết.
Việc sử dụng các hàm và thuộc tính ở dạng tĩnh có ưu điểm là ta có thể thay đổi dữ liệu toàn cục cho đối tượng đó, không cần khởi tạo đối tượng mới vẫn sử dụng được. Tuy nhiên nó có khuyết điểm là nếu ta khai báo tĩnh thì chương trình sẽ xử lý lưu trữ toàn cục nên sẽ tốn bộ nhớ hơn.
Download source code