Hướng dẫn php traits vs static methods - đặc điểm php so với phương thức tĩnh

Các ứng dụng PHP của tôi thường sử dụng các lớp để đặt tên. Các phương pháp trong các lớp này được định nghĩa là tĩnh.

Bây giờ PHP đã giới thiệu những đặc điểm, tôi đang cố gắng quấn đầu khi sử dụng chúng. Tôi đã thấy một số ví dụ về việc sử dụng các đặc điểm, nhưng tôi nghĩ rằng điều này có thể dễ dàng được thực hiện thông qua phương pháp lớp tĩnh.

Một ví dụ khá kỹ lưỡng khi sử dụng logger đã được liệt kê ở đây: Đặc điểm trong PHP - bất kỳ ví dụ/thực hành tốt nhất trong thế giới thực?

Nhưng tại sao sử dụng một đặc điểm, nếu bạn cũng có thể sử dụng logger tĩnh :: log ()? Điều duy nhất tôi có thể nghĩ đến bây giờ, là dễ dàng truy cập vào $ này. Một ví dụ khác mà tôi đang phải đối mặt ngay bây giờ, là một chức năng tồn tại của người dùng. Đặc điểm nó, hoặc phương pháp tĩnh nó?

Bất cứ ai có thể làm sáng tỏ về điều này?

Hướng dẫn php traits vs static methods - đặc điểm php so với phương thức tĩnh

Hỏi ngày 19 tháng 4 năm 2014 lúc 16:56Apr 19, 2014 at 16:56

Hướng dẫn php traits vs static methods - đặc điểm php so với phương thức tĩnh

7

Sau khi đọc các bình luận về câu hỏi, tôi nhận được câu trả lời là:

Đặc điểm cho phép mở rộng một lớp mà không phải là một phần của hệ thống phân cấp lớp. Không cần phải có một cái gì đó như class Book extends Loggable, vì bản thân cuốn sách không phải là một điều đáng lo ngại, chúng tôi chỉ muốn chức năng có thể đăng nhập. Chức năng trong loggable có thể được nhồi trong một đặc điểm, do đó có thể sử dụng các phương thức có thể đăng nhập trong sách như thể bạn đang mở rộng từ nó.

Ưu điểm của việc sử dụng các đặc điểm trên việc sử dụng các phương thức tĩnh trong các lớp (hoặc các hàm theo tên) là đặc điểm có quyền truy cập vào phạm vi lớp đầy đủ, cũng là thành viên riêng.

Nhược điểm của việc sử dụng các hàm tĩnh thay vì các đặc điểm, là khớp nối chặt chẽ (phụ thuộc) giữa các lớp, điều này làm tổn thương khả năng tái sử dụng và có thể làm tổn thương thử nghiệm đơn vị (ví dụ như khi sử dụng dịch vụ giả). Các phụ thuộc nên được tiêm vào thời gian chạy, điều này thực sự làm tăng nỗ lực khởi tạo một lớp/phương thức, nhưng cho phép linh hoạt tốt hơn so với ứng dụng đầy đủ. Đây là một cái nhìn sâu sắc mới cho tôi.

Đã trả lời ngày 21 tháng 4 năm 2014 lúc 7:53Apr 21, 2014 at 7:53

Hướng dẫn php traits vs static methods - đặc điểm php so với phương thức tĩnh

KrekkiedkrekkiedKrekkieD

9079 Huy hiệu bạc23 Huy hiệu Đồng9 silver badges23 bronze badges

Tôi chỉ sử dụng các đặc điểm cho các phương thức trợ giúp đơn giản [One-liners] (xác thực chuỗi regexp, trình chuẩn hóa chuỗi, trình tạo số primitiv) mà tôi thường cần trong một số lớp.

Khi không có đặc điểm, tôi đã sử dụng các phương thức tĩnh công khai - với các đặc điểm, có thể định nghĩa chúng là phương thức riêng tư thông thường.

Hoặc bạn có thể sử dụng các đặc điểm để xác định các hàm giả cơ bản kết hợp với các lớp có giao diện để đảm bảo, mọi phương pháp đều tồn tại.

Ưu điểm của các đặc điểm là bạn có thể sử dụng cùng một phương thức trong một số lớp và đối với những thay đổi nhỏ, bạn không phải viết lại các phương thức tương tự trong tất cả các lớp. Đặc điểm chỉ là thời gian. ;)

Và btw .. SPL_AUTOLOAD_REGISTER cũng có thể xử lý việc tải các đặc điểm. ;)

Đã trả lời ngày 28 tháng 3 năm 2018 lúc 8:51Mar 28, 2018 at 8:51

SammiefoxsammiefoxSammieFox

5541 Huy hiệu vàng6 Huy hiệu bạc1 gold badge6 silver badges4 bronze badges

Đặc điểm có thể truy cập các thành viên tư nhân của các đối tượng.

Đã trả lời ngày 19 tháng 4 năm 2014 lúc 17:51Apr 19, 2014 at 17:51

TomastomasTomas

1.3431 Huy hiệu vàng14 Huy hiệu bạc21 Huy hiệu đồng1 gold badge14 silver badges21 bronze badges

Đó là một quyết định thiết kế.

Trong trường hợp này, lớp tĩnh được sử dụng như một cầu nối giữa các phần OO và không phải của ngôn ngữ (các lớp tĩnh cũng có thể có các mục đích sử dụng khác). Hành vi của lớp "str" ​​có nhiều thủ tục hơn OO; Nó thực chất là một loạt các chức năng được bọc trong một lớp cho mục đích tổ chức mã. Về mặt khái niệm, phương pháp tĩnh "slug" thực sự sẽ là một phương thức thể hiện của các đối tượng chuỗi. Tuy nhiên, vì các chuỗi trong PHP là vô hướng, chúng ta không thể có điều đó.

Một đặc điểm đại diện cho một hành vi mà bạn có thể tùy chọn "bu lông" cho các lớp khác nhau, nhưng đó vẫn là trách nhiệm của các lớp đó. Không có gì ngăn cản bạn thực hiện lớp "STR" như một đặc điểm, nhưng các đối tượng của bạn sẽ đột nhiên trở nên chịu trách nhiệm về thao tác chuỗi khi họ thực sự không có doanh nghiệp làm như vậy.the responsibility of those classes. There is nothing stopping you from implementing the "Str" class as a trait, but your objects will suddenly become responsible for string manipulation when they really have no business doing so.

Bạn có nên sử dụng các đặc điểm PHP?

Mục đích chính của các đặc điểm PHP là giải quyết các giới hạn thừa kế duy nhất của ngôn ngữ, bởi vì trong PHP, bạn không thể thực hiện mở rộng Class1, Class2. Các đặc điểm chứa khai báo các phương thức hoặc các thuộc tính mà bạn có thể dễ dàng áp dụng cho các lớp bằng cách sử dụng từ khóa sử dụng.to solve the single inheritance limitations of the language, because in PHP you can't do extends Class1, Class2 . Traits contain a declaration of the methods or the properties that you can easily apply to the classes using the keyword use .

Khi nào tôi nên sử dụng các phương thức tĩnh trong PHP?

Từ khóa tĩnh đượ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 tạo ra một thể hiện của lớp.Từ khóa tĩnh cũng được sử dụng để khai báo các biến trong một hàm giữ giá trị của chúng sau khi hàm kết thúc.to declare properties and methods of a class as static. Static properties and methods can be used without creating an instance of the class. The static keyword is also used to declare variables in a function which keep their value after the function has ended.

Đặc điểm PHP là gì?

Trong PHP, một đặc điểm là một cách để cho phép các nhà phát triển sử dụng lại các phương pháp của các lớp độc lập tồn tại trong các hệ thống phân cấp kế thừa khác nhau.Nói một cách đơn giản, các đặc điểm cho phép bạn tạo các phương thức mong muốn trong cài đặt lớp, sử dụng từ khóa đặc điểm.Sau đó, bạn có thể kế thừa lớp này thông qua từ khóa sử dụng.a way to enable developers to reuse methods of independent classes that exist in different inheritance hierarchies. Simply put, traits allow you to create desirable methods in a class setting, using the trait keyword. You can then inherit this class through the use keyword.

Sự khác biệt giữa tính trạng và giao diện trong PHP là gì?

Sự khác biệt chính giữa các đặc điểm và giao diện trong PHP là các đặc điểm xác định việc thực hiện thực tế của từng phương thức trong mỗi lớp, vì vậy nhiều lớp thực hiện cùng một giao diện nhưng có hành vi khác nhau, trong khi các đặc điểm chỉ là các đoạn mã được tiêm trong một lớp trong PHP.