Làm cách nào để bạn gọi một phương thức không tĩnh của một lớp trong php bằng cách ::?

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 của 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 chịu trách nhiệm hoàn toàn 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à

ClassName::staticMethod[];
1

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

ClassName::staticMethod[];
4

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 kiểu chiến đấu và mô tả 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?

Trong hướng dẫn này, chúng ta sẽ tìm hiểu thêm về các phương thức tĩnh trong PHP OOP. Chúng ta sẽ thảo luận về ý nghĩa của các phương thức tĩnh, khi nào sử dụng chúng, cú pháp và sự khác biệt giữa các phương thức tĩnh và không tĩnh

Các phương thức tĩnh trong PHP là gì?

  • Các phương thức tĩnh được tạo bằng từ khóa tĩnh
  • Các phương thức tĩnh của một lớp được gọi trực tiếp. Điều đó có nghĩa là chúng ta không cần tạo thể hiện của lớp để gọi phương thức tĩnh của nó
  • Một lớp có thể chứa cả phương thức tĩnh và không tĩnh
  • Để gọi phương thức tĩnh của một lớp, chúng ta sử dụng toán tử phân giải phạm vi

Cú pháp của phương thức tĩnh trong PHP

Cú pháp gọi phương thức tĩnh

ClassName::staticMethod[];

Ví dụ

  • Trong ví dụ trên, chúng ta tạo một lớp có chứa phương thức tĩnh trong đó
  • Chúng tôi gọi phương thức tĩnh của lớp này bên ngoài bằng cách sử dụng phương thức phân giải phạm vi

Gọi phương thức tĩnh bên trong lớp – PHP

  • Trong PHP, từ khóa self cho phép gọi phương thức tĩnh của chính nó bên trong lớp. Hãy xem ví dụ sau, trong đó chúng ta tạo một lớp với phương thức tĩnh và gọi nó bên trong hàm tạo của lớp
  • bản thân. methodName[] là cú pháp chung để gọi phương thức tĩnh bên trong lớp

Gọi phương thức tĩnh bên trong một lớp khác – PHP

Rất thú vị khi sử dụng trường hợp của các phương thức tĩnh, chúng ta có thể gọi một phương thức tĩnh công khai bên trong một lớp khác. Hãy nhớ rằng, nó phải là một phương thức tĩnh công khai

Gọi một phương thức tĩnh trong lớp con – PHP

Trong trường hợp thừa kế, chúng ta có thể gọi phương thức tĩnh của lớp cha bên trong lớp con bằng cách sử dụng từ khóa cha. Nhìn vào ví dụ dưới đây

  • Trong ví dụ trên, chúng ta tạo một lớp cha với một số phương thức tĩnh
  • Chúng tôi tạo một lớp khác mở rộng lớp cha
  • Gọi phương thức tĩnh của lớp cha bằng từ khóa cha theo sau là tên của phương thức tĩnh

Ghi chú. Như chúng ta đã đề cập trong phần trước, việc gọi một phương thức tĩnh bên trong một lớp khác yêu cầu nó phải công khai. Nhưng trong trường hợp gọi phương thức tĩnh của lớp cha [kế thừa], công cụ sửa đổi truy cập phương thức tĩnh có thể là công khai hoặc được bảo vệ

Cách gọi phương thức không tĩnh trong php?

Trong PHP 5, gọi các phương thức không tĩnh sẽ tạo ra cảnh báo E_STRICT một cách tĩnh . Trong PHP 7, việc gọi các phương thức không tĩnh một cách tĩnh không được dùng nữa và sẽ tạo cảnh báo E_DEPRECATED. Xem các phương thức tĩnh [php. mạng] để biết chi tiết. Trong ví dụ sau, phương thức foo[] được gọi là động trong khi thực tế nó là tĩnh.

Làm cách nào để gọi một phương thức không tĩnh từ một lớp khác trong php?

php'; . }

Cách gọi phương thức không tĩnh trong phương thức tĩnh php?

Nhưng khi chúng ta thử gọi hàm Không tĩnh i. e, Phương thức kiểm tra[] bên trong hàm tĩnh nó báo lỗi - “Cần có tham chiếu đối tượng cho trường không tĩnh, thành viên hoặc Thuộc tính 'Chương trình. Phương pháp kiểm tra[]". Vì vậy, chúng ta cần tạo một thể hiện của lớp để gọi phương thức không tĩnh .

Chúng ta có thể gọi phương thức không tĩnh với tên lớp không?

Mỗi đối tượng của lớp có bản sao riêng của các thành viên dữ liệu Không tĩnh. Chúng có thể được truy cập bằng cách sử dụng tên lớp hoặc đối tượng . Chúng thường được truy cập thông qua một đối tượng của lớp. Các phương thức tĩnh có thể được gọi mà không cần đối tượng hoặc đối tượng của lớp đó.

Chủ Đề