Sự khác biệt giữa biến tĩnh và không tĩnh trong php

Ở đây, chúng tôi khai báo một phương thức tĩnh. hoan nghênh[]. Sau đó, chúng ta gọi phương thức tĩnh bằng cách sử dụng tên lớp, dấu hai chấm [. ] và tên phương thức [không tạo phiên bản của lớp trước]

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

Một lớp có thể có cả phương thức tĩnh và không tĩnh. Một phương thức tĩnh có thể được truy cập từ một phương thức trong cùng một lớp bằng cách sử dụng từ khóa self và dấu hai chấm [. ]

Ví dụ

lời chào lớp học {
  chức năng tĩnh công khai chào mừng[] {
    echo "Xin chào thế giới. ";
  }

  public function __construct[] {
    self. hoan nghênh[];
  }
}

lời chào mới[];
?>

Tự mình thử »

Các phương thức tĩnh cũng có thể được gọi từ các phương thức trong các lớp khác. Để làm điều này, phương thức tĩnh phải là public

Ví dụ

lời chào lớp học {
  chức năng tĩnh công khai chào mừng[] {
    echo "Xin chào thế giới. ";
  }
}

class SomeOtherClass {
  public function message[] {
    chào. chào mừng[];
  }
}
?>

Tự mình thử »

Để gọi một phương thức tĩnh từ một lớp con, hãy sử dụng từ khóa parent bên trong lớp con. Ở đây, phương thức tĩnh có thể là public hoặc protected

Từ khóa static được sử dụng để khai báo các thuộc tính và phương thức của một lớp là tĩnh. Các thuộc tính và phương thức tĩnh có thể được sử dụng mà không cần tạo một thể hiện của lớp

Từ khóa static cũng được sử dụng để khai báo các biến trong hàm giữ nguyên giá trị của chúng sau khi hàm kết thúc

Vậy điều gì sẽ xảy ra nếu chúng tôi quyết định thêm loại chiến đấu thứ tư vào BattleManager. Không vấn đề gì. thêm một hằng số mới, sau đó cập nhật logic phương thức battle[] cho bất kỳ điều gì thú vị mà loại mới này thực hiện

Nhưng bất ngờ. Nếu chúng ta quên thêm loại mới vào index.php, thì sẽ không ai có thể sử dụng nó. Thực sự, tôi muốn BattleManager hoàn toàn chịu trách nhiệm về các loại trận chiến để đó là tệp duy nhất tôi cần chạm vào khi có gì đó thay đổi

Để làm điều đó, hãy tạo một hàm mới trong BattleManager sẽ trả về tất cả các loại và mô tả của chúng. gọi nó là public2

dòng 1 - 2class BattleManager{. dòng 5 - 75hàm công khai getAllBattleTypesWithDescriptions[]{. dòng 78 - 82}. dòng 84 - 90}

Tại đây, trả về một mảng có loại là khóa và mô tả sẽ được sử dụng trong trình đơn thả xuống làm giá trị

dòng 1 - 2class BattleManager{. dòng 5 - 75public function getAllBattleTypesWithDescriptions[]{return mảng[self. TYPE_NORMAL => 'Bình thường',tự. TYPE_NO_JEDI => 'Không có sức mạnh của Jedi',chính bạn. TYPE_ONLY_JEDI => 'Chỉ có sức mạnh của Jedi'];}. dòng 84 - 90}

Thật tuyệt vời. Tiếp theo, nếu chúng ta gọi phương thức này trong index.php, chúng ta có thể xóa các giá trị được mã hóa cứng ở đó. Tất nhiên, phương pháp này là không tĩnh. Điều đó có nghĩa là chúng ta cần gọi phương thức này trên đối tượng BattleManager. Tạo một cái mới bằng cách nói public5

dòng 1 - 11$battleManager = $container->getBattleManager[];. dòng 13 - 141

Bây giờ thêm BattleManager0

dòng 1 - 11$battleManager = $container->getBattleManager[];$battleTypes = $battleManager->getAllBattleTypesWithDescriptions[];. dòng 14 - 141

Cuối cùng, cuộn xuống. Thay cho các giá trị được mã hóa cứng, BattleManager1 trên BattleManager2 là BattleManager3. Kết thúc BattleManager1 và làm cho tùy chọn động bằng cách in BattleManager5 và

dòng 1 - 32. dòng 34 - 58. dòng 61 - 95. dòng 99 - 122Battle Type$typeText]. ?>. dòng 131 - 134

Vâng. Hãy thử một lần. Nhấp vào liên kết "Trận chiến lần nữa". Và vâng. Trình đơn thả xuống có ba giá trị giống như trước đây

Đây là nơi mọi thứ trở nên thú vị. Chúng tôi đã làm cho BattleManager6 không tĩnh. Thay vào đó, chúng ta có thể làm cho nó tĩnh không?

Để biết, hãy tự hỏi mình hai câu hỏi này

  1. Nó có hợp lý không - về mặt triết học - đối với phương thức BattleManager6 được gắn vào lớp thay vì một đối tượng? . các loại và mô tả trận chiến sẽ không khác nhau đối với các đối tượng BattleManager khác nhau;

  2. Phương thức có cần biến BattleManager9 không? . Nhưng chúng tôi không sử dụng BattleManager9

Vì vậy, hãy biến phương thức này thành battle[]2 bằng cách nói battle[]3

dòng 1 - 2class BattleManager{. dòng 5 - 75hàm tĩnh công khai getAllBattleTypesWithDescriptions[]{. dòng 78 - 82}. dòng 84 - 90}

Điều duy nhất thay đổi bây giờ là cách chúng ta gọi phương thức của mình. Đầu tiên, chúng ta không cần một đối tượng BattleManager nào cả. Thay vào đó, chỉ cần nói battle[]5

dòng 1 - 11$battleTypes = BattleManager. getAllBattleTypesWithDescriptions[];. dòng 13 - 140

Ok, thử nó ra. nó hoạt động

Hãy nhìn xem, thứ tĩnh và không tĩnh này có thể khó khăn. Và trong rất nhiều hướng dẫn khác, bạn sẽ thấy điều này được dạy ngược lại. họ sẽ cho bạn xem nội dung tĩnh trước, vì nó dễ hơn một chút. Sau đó, họ sẽ dạy các thuộc tính và phương thức không tĩnh

Nhưng đoán xem. đó không phải là cách các lập trình viên giỏi viết mã trong thế giới thực. họ làm cho hầu hết mọi thứ không tĩnh. Và để bắt đầu, tôi muốn các bạn cũng làm cho mọi thứ không tĩnh. Sau đó, khi bạn cảm thấy thoải mái hơn, bạn sẽ bắt đầu thấy các tình huống khác nhau mà ở đó bạn có thể làm cho một số thứ tĩnh. Thực ra việc thay đổi mọi thứ từ battle[]6 thành battle[]2 dễ dàng hơn nhiều so với cách khác. Và khi bạn làm cho mọi thứ không tĩnh, nó buộc bạn phải xây dựng mã tốt hơn. Và đó không phải là lý do tại sao chúng ta ở đây?

Sự khác biệt giữa các biến tĩnh và không tĩnh là gì?

Các biến tĩnh được chia sẻ giữa tất cả các phiên bản của một lớp. Các biến không tĩnh dành riêng cho phiên bản đó của một lớp . Biến tĩnh giống như một biến toàn cục và có sẵn cho tất cả các phương thức. Biến không tĩnh giống như một biến cục bộ và chúng chỉ có thể được truy cập thông qua thể hiện của một lớp.

Sự khác biệt giữa phương thức tĩnh và không tĩnh trong PHP là gì?

Lớp tĩnh chứa biến tĩnh và phương thức tĩnh trong khi lớp khởi tạo chứa biến không tĩnh và phương thức không tĩnh . Các chương trình có các lớp tĩnh khó kiểm tra và mở rộng trong khi các chương trình có các lớp không tĩnh cung cấp thuộc tính mở rộng và kiểm tra dễ dàng.

Biến tĩnh PHP là gì?

Loại phạm vi biến cuối cùng mà tôi thảo luận được gọi là tĩnh. Ngược lại với các biến được khai báo là tham số của hàm, bị hủy khi hàm thoát, một biến tĩnh sẽ không mất giá trị khi hàm thoát và sẽ vẫn giữ giá trị đó nếu hàm được gọi lại.

Sự khác biệt giữa biến tĩnh và biến bình thường là gì?

Bên trong hàm, biến thông thường bị hủy khi hàm thoát. Biến tĩnh trong hàm vẫn giữ nguyên giá trị của nó ngay cả sau khi hàm thoát .

Chủ Đề