Giải thích biến tĩnh trong PHP

Tĩnh là một từ khóa PHP có nhiều cách sử dụng. Nó gần như được sử dụng phổ biến, mặc dù có nhiều biến thể của nó. Hãy xem xét tất cả năm người trong số họ

  • phương pháp tĩnh
  • tài sản tĩnh
  • đóng cửa tĩnh
  • biến tĩnh
  • tĩnh như một tên lớp

phương pháp tĩnh

Cách sử dụng tĩnh phổ biến nhất là để xác định

Các phương thức như vậy là một phần của lớp, giống như bất kỳ phương thức nào, mặc dù chúng có thể được sử dụng ngay cả khi không có bất kỳ đối tượng khởi tạo nào như vậy. Đây thực sự là sự khác biệt chính với một phương pháp bình thường.

5 không có sẵn trong các phương pháp như vậy

 aNonStaticMethod();
?>

Lưu ý rằng các phương thức tĩnh có thể được gọi từ một đối tượng, mặc dù biến giả

5 vẫn KHÔNG khả dụng. Trên thực tế, PHP phát ra một lỗi nghiêm trọng, bất cứ khi nào biến 
5 được đề cập trực tiếp trong một phương thức tĩnh. đây là lý do tại sao ví dụ phải sử dụng biến biến để thực sự hiển thị trạng thái

Vì các phương thức tĩnh không phụ thuộc vào một đối tượng nên chúng rất tốt cho các nhà máy. Chúng cũng hữu ích để truy cập các thuộc tính tĩnh riêng tư, vì cả hai đều tĩnh. Cuối cùng, chúng cũng hữu ích cho các tiện ích có liên quan đến một lớp nhưng không phụ thuộc vào trạng thái đối tượng cục bộ. tuy nhiên, chúng có thể được coi là một chức năng

thuộc tính tĩnh

là họ hàng thân thiết của các phương thức tĩnh. Chúng không phụ thuộc vào đối tượng mà chỉ phụ thuộc vào chính lớp đó. Chúng có thể chứa một số thông tin quan trọng cho lớp, nhưng không phải cho các đối tượng

Thuộc tính tĩnh có một số cách sử dụng thích hợp. Cái đầu tiên trong số chúng là một thuộc tính cho một phương thức tĩnh. Điều đó có ý nghĩa. bất cứ thứ gì mà một phương thức tĩnh phải lưu trữ phải ở trong một thuộc tính tĩnh. Trên thực tế, một cái riêng tư, hoặc một cái được bảo vệ

Chúng đóng vai trò là hằng số khi giá trị của hằng số được tải động và do đó, không được biết tại thời điểm biên dịch. Các hằng số không thuộc lớp có thể được định nghĩa tại thời điểm thực thi với

0, nhưng không phải là các hằng số của lớp. do đó, việc sử dụng các thuộc tính tĩnh. Chúng cũng thay thế các hằng số khi hằng số phải là một tài nguyên hoặc một mảng hoặc một đối tượng khác

Chúng được sử dụng khi triển khai một singleton, khi khởi tạo đối tượng có điều kiện tiên quyết hoặc để chia sẻ dữ liệu giữa các đối tượng, chẳng hạn như bộ đếm. Chúng cũng có thể được sử dụng cho bộ đệm cục bộ

Thuộc tính tĩnh có xu hướng khó khởi tạo. tất cả các thuộc tính có thể được khởi tạo tại thời điểm mã hóa (giá trị mặc định) hoặc thời gian xây dựng. Rõ ràng, cái sau không có sẵn cho thuộc tính tĩnh và chỉ có thể có giá trị mặc định. Tùy chọn khác là đặt thuộc tính tĩnh trong mã chính, tại bootstrap, dẫn đến một số phụ thuộc khó giải quyết

đóng cửa tĩnh

Trong khi các phương thức có thể tĩnh hoặc không, chức năng không có sự thay thế như vậy. họ không thể tĩnh. Tuy nhiên, có một loại phương thức cuối cùng có thể là tĩnh. đóng cửa tĩnh

Đóng cửa là các chức năng có thể được lưu trữ trong một biến. các chức năng có thể có tên của chúng được lưu trữ trong một biến, mặc dù. Closure cũng có khả năng tổng hợp các biến từ bối cảnh tạo ra chúng, để sử dụng trong tương lai. Như vậy,

5 có sẵn trong một bao đóng được tạo bên trong một đối tượng

foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>

Lưu ý rằng không cần 'use ($this)' khi tạo bao đóng để bao gồm

5 trong đó. nó được thực hiện tự động

Bây giờ, nếu phương thức

3 thực sự là tĩnh, thì 
5 không khả dụng nữa, đối với phương thức tĩnh cũng như đối với bao đóng đã tạo

Nhưng nếu bạn không muốn truyền bá bối cảnh sáng tạo với bao đóng, bạn thực sự có thể làm cho bao đóng

5 và 
5 sẽ không khả dụng nữa. Điều này có thể tránh rò rỉ hoặc sẽ cho phép biến 
5 được lấp đầy bởi ngữ cảnh khác sau này

foo();
$f();

/*
Fatal error: Uncaught Error: Using $this when not in object
*/

?>

biến tĩnh

Giống như có các phương thức tĩnh và hàm tĩnh, có cả thuộc tính tĩnh VÀ

Biến tĩnh là các biến nằm trong ngữ cảnh và có sẵn cho lần gọi tiếp theo

Điều này thực sự hoạt động giống như một số lớp học thời tiền sử. biến tĩnh có sẵn để lưu trữ một số dữ liệu được lưu trong bộ nhớ cache. ở đây, chúng tôi đã sử dụng nó làm bộ đếm, nhưng các biến tĩnh tạo bộ đệm tuyệt vời cho bất kỳ từ điển nào không nên tải mỗi cuộc gọi. Tải từ điển ở lần gọi đầu tiên, sau đó nó sẽ nằm trong bộ nhớ cho phần còn lại của quá trình thực thi

Lưu ý rằng biến hoàn toàn vô hình với thế giới bên ngoài, giống như một tài sản riêng

Thông thường, các biến tĩnh là bước đầu tiên trước khi biến chức năng này thành một lớp đầy đủ. một khi bạn hiểu rằng việc kiểm tra biến không thể truy cập như vậy yêu cầu một số cơ chế 'đặt lại', sự quyến rũ thời tiền sử của nó sẽ biến mất và chức năng được cấu trúc lại thành một lớp

tĩnh như một tên lớp

Không thể gọi một lớp là

5 nhưng có thể gọi nó bằng từ khóa này. Trong nội dung lớp, bạn có thể tham chiếu đến lớp hiện tại hoặc bất kỳ lớp cha nào trong trường hợp dự phòng, sử dụng 
5. Điều đó thuận tiện trong một số tình huống đáng ngạc nhiên

0

Khi sử dụng tĩnh trong những tình huống đó, lớp diễn xuất hiện tại sẽ tự động thay thế

5. Trong ví dụ, đó là lớp x. Khi bạn thay đổi tên của lớp từ x thành tên khác, phần còn lại của lớp sẽ tiếp tục chạy. 
5 hoạt động như một tên lớp tương đối (nghĩa là liên quan đến vị trí mã)

Có một từ khóa khác đang cạnh tranh với

5. đó là 
foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>
3. Họ cùng nhau xử lý các ràng buộc tĩnh muộn

Về cơ bản,

foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>
3 chỉ có thể được sử dụng ở cùng một vị trí và nó sẽ hoạt động gần như giống hệt nhau. Ngoại trừ việc
foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>
3 được giải quyết ở kiểu biên dịch, 'tĩnh' nếu bạn bỏ qua cách chơi chữ và nó sẽ luôn tham chiếu đến lớp mà nó được viết trong đó. Trong khi
5 phụ thuộc vào người đang gọi thực thể tĩnh

Bối rối ?

8

Trong lần gọi đầu tiên tới whoami(), ngữ cảnh của cuộc gọi là X, vì vậy phương thức sẽ hiển thị

foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>
7. Trong lần gọi thứ hai tới whoami(), Y được sử dụng, nhưng whoami thực sự nằm trong X, vì Y không có phương thức như vậy. Ở đó,
5 và 
foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>
3 tách rời nhau và hiển thị các lớp khác nhau

Về hiệu suất, luôn mặc định là

foo();
$f();

/*
object(x)#1 (1) {
  ["y":"x":private]=>
  int(1)
}
*/

?>
3, vì nó sẽ được biên dịch và thực thi như vậy.
5 hiếm khi được sử dụng

Xem lại mã của bạn bằng phân tích tĩnh

Phân tích tĩnh không liên quan đến từ khóa

5. Tuy nhiên, nó rất có thể giúp bạn xem lại mã của mình và tìm cách sử dụng các tính năng đó

Biến tĩnh với ví dụ là gì?

1) Biến int tĩnh vẫn còn trong bộ nhớ khi chương trình đang chạy . Biến bình thường hoặc biến tự động bị hủy khi lệnh gọi hàm nơi biến được khai báo kết thúc. Ví dụ: chúng ta có thể sử dụng int tĩnh để đếm số lần một hàm được gọi, nhưng không thể sử dụng biến auto cho mục đích này.

Biến tĩnh là gì?

Trong lập trình máy tính, biến tĩnh là biến được cấp phát "tĩnh", nghĩa là thời gian tồn tại của nó (hoặc "mức độ") là toàn bộ quá trình chạy chương trình< . .

Làm cách nào để xác định biến tĩnh trong lớp PHP?

Bạn có thể khai báo một biến là tĩnh đơn giản bằng cách đặt từ khóa STATIC trước tên biến .

Làm cách nào để gọi một biến tĩnh trong PHP?

Các thuộc tính tĩnh được truy cập bằng cách sử dụng Toán tử phân giải phạm vi (. ) và không thể truy cập thông qua toán tử đối tượng ( -> ). Có thể tham chiếu lớp bằng một biến. Giá trị của biến không được là từ khóa (e. g. bản thân, cha mẹ và tĩnh). in $foo. $my_static.