Sự đóng gói biến, các phương thức Set/Get là các phương pháp hay nhất nhưng tại sao chúng ta lại có cơ hội tuyên bố biến công khai nếu nó không được sử dụng? Nó sẽ tốt hơn nếu các biến luôn được đặt ở chế độ riêng tư theo mặc định mà không có cơ hội làm cho chúng được công khai vì tất cả các hướng dẫn tôi đọc đều nói rằng chúng nên được đóng gói với các phương thức set/get? Có trường hợp sử dụng hợp lệ nào cho các biến công khai ít nhất trong PHP OOP không?Có trường hợp sử dụng hợp lệ nào để sử dụng các biến công khai trong PHP OOP không?
Trả lời
Trên thực tế, đó chỉ là cách vòng khác: Về mặt lý thuyết getters/setters là sai. Các thuộc tính định nghĩa trạng thái của một đối tượng, trong đó các phương thức xác định hành vi. Getters/Setters chỉ chặn truy cập đọc và ghi đối với các thuộc tính, nhưng chúng phá vỡ hoàn toàn nghĩa ngữ nghĩa: Bây giờ đọc trạng thái của một đối tượng là hành vi của đối tượng.
Để đảm tính để trông giống như thuộc tính lại có một RFC trên đường :) https://wiki.php.net/rfc/propertygetsetsyntax
Set/Get phương pháp thực hành tốt nhất nhưng tại sao chúng ta có một cơ hội để tuyên bố một công biến nếu nó không có nghĩa là để được sử dụng nào?
Thực tiễn tốt nhất và không được sử dụng không giống nhau. Một ngôn ngữ cần cung cấp các công cụ khác nhau cho các trường hợp sử dụng khác nhau và phải nhất quán.
Đối tượng PHP luôn hỗ trợ thành viên công khai và khi hiển thị khác biệt được giới thiệu, vì lý do tương thích ngược, các thành viên công khai rất hữu ích.
Sẽ tốt hơn nếu biến luôn được đặt ở chế độ riêng tư theo mặc định mà không có cơ hội công khai chúng vì tất cả các hướng dẫn tôi đọc đều phải được đóng gói bằng các phương thức set/get?
Câu hỏi đó không thể được trả lời cụ thể, quá chủ quan và có quá nhiều trường hợp sử dụng khác nhau sẽ dẫn đến một câu trả lời khác.
Có trường hợp sử dụng hợp lệ nào cho các biến công khai ít nhất trong PHP OOP không?
Bắt đầu với tính tương thích ngược. Nếu bạn không thể refactor mã của bạn nhưng sẽ cần phải viết lại nó hoàn toàn tất cả các thời gian, điều này sẽ rất tốn kém.
hãy xem .. đây là lớp API API thực tế từ CakePHP EmailComponent. sử dụng lớp này, bạn chỉ cần "đặt" một số tài sản sau đó chỉ cần send()
$this->Email->to = '[email protected]';
$this->Email->from = '[email protected]';
$this->Email->title = 'xxx';
$this->Email->msg = 'blabla..';
$this->Email->send();
trên thực tế có rất nhiều tài sản tư nhân và chức năng bên trong lớp này nhưng đó là tư nhân.
Lớp có (một) trách nhiệm làm điều gì đó. Đóng gói chỉ để xuất bản những gì mọi người sử dụng để làm điều đó và giữ kỹ thuật/cơ sở hạ tầng bên trong là riêng.
- 1. Có hợp lệ để sử dụng các trường bit với công đoàn không?
- 2. Trường hợp sử dụng hợp lệ của goto trong PHP là gì?
- 3. Giá trị OOP có được sử dụng trong PHP không?
- 4. Trường hợp ngoại lệ khi sử dụng Xamarin Android
- 5. Các trường hợp sử dụng để thực hiện chú thích
- 6. Trường hợp sử dụng nào cho OWL?
- 7. Trường hợp không sử dụng Properties trong Objective-C
- 8. Trường hợp sử dụng để phản ánh
- 9. Sử dụng hợp lệ typedef?
- 10. Trường hợp sử dụng DropBoxManager?
- 11. Trường hợp sử dụng phổ biến của erlang
- 12. ThreadPool.QueueUserWorkItem trường hợp sử dụng
- 13. Có hợp pháp khi sử dụng các hiệu ứng phụ trong trường hợp ngoại lệ do constexpr đưa ra không?
- 14. Có hợp lệ để sử dụng gọi lại tĩnh riêng tư trong PHP không?
- 15. Sử dụng chuỗi không hợp lệ
- 16. Các trường hợp sử dụng cho IdentityHashMap
- 17. Trường hợp sử dụng cho LinkedList
- 18. sử dụng enum trong chuyển/trường hợp
- 19. Có an toàn để lưu trữ một trường hợp ngoại lệ và tái sử dụng không?
- 20. Tôi có nên sử dụng đặt tên trường hợp cao hơn để khai báo biến cố định java không?
- 21. Một số trường hợp sử dụng phổ biến để sử dụng Microkernel của Akka là gì?
- 22. Các trường hợp sử dụng không khai báo tên cho tên tệp trong mẫu là gì?
- 23. OAuth: Trường hợp sử dụng OAuth
- 24. Có cách nào để sử dụng kết hợp không phù hợp trong JavaScript cho các cụm từ thông dụng không?
- 25. Trường hợp không nên sử dụng các trường hợp ở Scala?
- 26. Trường hợp sử dụng cho Clojure trong các dự án
- 27. Có quá mức cần thiết để sử dụng scoped_ptr trong các trường hợp đơn giản không?
- 28. Daemon thread- Trường hợp sử dụng
- 29. Trường hợp sử dụng cho JCA
- 30. Trường hợp jdbc Rowsets được sử dụng?
có các trường hợp sử dụng cho các biến được bảo vệ trong các lớp (ví dụ: thừa kế/ghi đè), nhưng tôi không biết bất kỳ trường hợp nào cho các biến công khai.có thể là do khai báo php 4 var $ var trong các lớp được hiểu là công khai trong php 5. – Hajo
Câu trả lời đơn giản: vì có nhiều lý do hoàn toàn hợp lệ khác nhau cho ** not ** (mong muốn) để sử dụng getters và setters, vì vậy bạn chỉ cần truy cập các biến công khai. – CodeCaster
@CodeCaster trong hầu hết các trường hợp của oop động cho thấy thiết kế tồi tôi nghĩ. – Hajo