Nếu tôi có nhiều lớp trong các tệp php khác nhau mà tôi đưa vào một tệp duy nhất và một số lớp này có các phụ thuộc vào các lớp khác, thì thứ tự mà chúng được bao gồm có phải là vấn đề không? Hoặc, chỉ đơn giản là bao gồm chúng (theo thứ tự nào) trước khi chúng được sử dụng tất cả những gì quan trọng?Thứ tự của định nghĩa lớp có quan trọng trong PHP không?
Trả lời
Có, điều đó quan trọng.
Tôi khuyên bạn nên sử dụng autoloading để giải quyết sự phụ thuộc của lớp học. Các lớp đó chỉ được nạp khi chúng thực sự cần thiết và bạn không phải bận tâm với việc bao gồm mọi tệp PHP đơn lẻ bằng tay.
Mặc dù vậy, bạn phải giữ cho mọi lớp trong tệp riêng của nó để làm việc. Nhưng đó là cách tốt để giữ mọi thứ gọn gàng và sạch sẽ.
Vì vậy, bạn có nói rằng ngay cả khi tôi bao gồm mọi tệp và phụ thuộc tôi cần trước khi sử dụng chúng, vẫn có thể có vấn đề vì thứ tự mà tôi đưa vào? – TaylorOtwell
Có, và theo dõi tất cả các nội dung của bạn là khá khó chịu. Tự động tải cũng có thể cải thiện hiệu suất của bạn vì nó chỉ tải những gì kịch bản của bạn thực sự cần. Tải tập tin PHP thường là một I/O-hoạt động, mà chủ yếu là khủng khiếp chậm. – selfawaresoup
Chỉ cần bao gồm chúng trước khi chúng cần và mọi thứ sẽ ổn.
Điều quan trọng là nếu một lớp đã cố gắng sử dụng một lớp khác chưa được phân tích cú pháp thì một lỗi sẽ xảy ra. Tùy chọn tốt nhất là đặt các lớp trong kịch bản để phụ thuộc vẫn còn nguyên vẹn.
Nếu tất cả đều nằm trong cùng một tệp, không có thứ tự nào không quan trọng. Có một số trường hợp hiếm hoi (tôi đã nhìn thấy với không gian tên) nơi mà trật tự không quan trọng, nhưng đừng lo lắng về điều đó quá nhiều trừ khi bạn đang đẩy phong bì.
Hãy dùng thử. Điều tồi tệ nhất có thể xảy ra là nó sẽ cung cấp cho bạn một lỗi ...
Trong 1 tệp PHP, bạn có thể khai báo hàm/lớp ở mọi nơi và gọi chúng ở bất kỳ đâu (trong tệp đó), thứ tự không quan trọng.
Đối với bao gồm, bạn phải bao gồm tệp TRƯỚC KHI bạn cố gắng sử dụng hàm/lớp được khai báo trong tệp đó.
giữ mọi thứ trong một tệp có vẻ thoải mái cho các dự án nhỏ nhưng nó cấm bạn sử dụng lại các phần của phần mềm và bạn phải tải toàn bộ mọi thứ, ngay cả khi bạn không thực sự sử dụng tất cả các lớp/chức năng. Đó là một sự lãng phí khá lớn về hiệu suất. – selfawaresoup
Nếu bạn đang sử dụng bộ nạp tự động, các tệp có chứa nhiều lớp cần phải có các lớp được sắp xếp theo thứ bậc. Nếu không, bạn sẽ có lỗi. –
Có vấn đề và khi một số lượng lớn các lớp học có liên quan, nó có thể gây ra vấn đề. Sử dụng tính năng tự động tải không khả thi khi kịch bản sản xuất của bạn cần bao gồm 40 hoặc 50 lớp, luôn luôn là trường hợp nếu ứng dụng của bạn được thiết kế đúng theo thực hành OOP tốt nhất, và bạn cần phải xử lý các biểu mẫu ...
Hãy để tôi giải thích tại sao thứ tự lại quan trọng. Nếu bạn sử dụng trình nạp tự động, mỗi lần mở rộng từ khóa được tìm thấy, có một nỗ lực để tự động tải một lớp. Vì vậy, nếu bạn mở rộng trước khi lớp được mở rộng đã được xác định, nó sẽ kích hoạt một sự kiện tự động tải.
Khi bạn phát triển ứng dụng của mình, hãy sử dụng trình tải tự động tùy chỉnh. Làm cho trình tự động tải tùy chỉnh đó cung cấp cho bạn thông tin về thời gian và bộ nhớ được sử dụng. Nó sẽ tải tất cả các tập tin lớp một và lãng phí rất nhiều thời gian làm như vậy. Khi ứng dụng của bạn hoàn tất, bạn có thể tối ưu hóa bằng cách tập trung nhiều lớp liên quan vào một tệp. Ví dụ, lớp biểu mẫu của tôi là trong class.form.php và nó không chỉ tải lớp biểu mẫu. Nó tải thêm 50 lớp khác liên quan đến biểu mẫu. Vì vậy, tôi có mọi thứ trong một tệp và khi tôi tạo biểu mẫu mới(), trình tải tự động nạp class.form.php bao gồm các lớp khác mà biểu mẫu thường cần (form_checkbox, form_input và vv), vì vậy khi chúng cần thiết, chúng không phải là trình tải tự động vì chúng đã được xác định.
Bạn có thể tạo tập lệnh PHP sẽ tái sử dụng, giải quyết các phụ thuộc và sắp xếp tất cả các lớp trong tệp lớp đơn (class.form.php sử dụng ví dụ của tôi) để tất cả chúng có lớp cha được xác định trước từ khóa mở rộng (mà kích hoạt tự động tải) được tìm thấy. Tôi chạy php -w trên tập tin ghép nối để xóa các bình luận và không gian. Nó đã giảm các lớp biểu mẫu của tôi từ 80K xuống còn 18K. Bất cứ khi nào tôi sử dụng một biểu mẫu, tôi tạo một biểu mẫu mới() và nó tải giá trị 18K của các lớp liên quan đến biểu mẫu, không quá nhiều.
Ban đầu tôi đã sử dụng lệnh lệnh cat cat nhưng nó không hoạt động. Bạn cần một kịch bản thông minh hơn có thể giải quyết cha mẹ của mỗi lớp mở rộng và sắp xếp thứ tự các lớp trong tệp chứa nhiều lớp liên quan.
Có vẻ như những gì bạn đang cố gắng thực hiện thủ công, [OPCache] (http://php.net/manual/en/intro.opcache.php) tự động thực hiện. –
- 1. Thứ tự của định nghĩa biểu định kiểu css có quan trọng không?
- 2. Thứ tự của bảng ảo có quan trọng không?
- 3. Thứ tự của khối catch có quan trọng không?
- 4. Máy chủ SQL - Thứ tự cột có quan trọng không?
- 5. Thứ tự của một lớp trên bộ chọn có quan trọng không? Nếu có, tôi có thể chỉ định thứ tự không?
- 6. Thứ tự các vụ việc có quan trọng trong câu lệnh chuyển đổi PHP không?
- 7. Thứ tự của các tiêu đề trong phản hồi HTTP có quan trọng không?
- 8. Trong WPF, trình tự của Triggers có quan trọng không?
- 9. Serialize/deserialize objects - thứ tự các trường quan trọng?
- 10. Thứ tự của các quy tắc trong một tệp css đơn có quan trọng không?
- 11. Ý nghĩa của GLib-GIO-QUAN TRỌNG lỗi khẳng định
- 12. SQL - Thứ tự của điều kiện WHERE có quan trọng không?
- 13. "Thứ tự văn bản" trên các lớp một phần có được định nghĩa chính thức không?
- 14. Thứ tự của các tùy chọn -l và -L trong liên kết GNU có quan trọng không?
- 15. Thứ tự url có quan trọng trong sơ đồ trang web XML không?
- 16. Liệu thứ tự tham gia có quan trọng trong SQL không?
- 17. Thứ tự các tính năng trong các vectơ tính năng LibSVM có quan trọng không?
- 18. Thứ tự các cột trong truy vấn có quan trọng không?
- 19. Xác định thứ tự khởi tạo của lớp WebActivator.PreApplicationStartMethod
- 20. Làm cách nào để nhận được thứ tự định nghĩa thuộc tính lớp trong Python?
- 21. Thứ tự của các phần tử xmlns có quan trọng là
- 22. phương pháp lớp Định nghĩa trong PHP
- 23. Trình tự của các giá trị có quan trọng trong một đối tượng JSON không?
- 24. GLM :: ivec2 như quan trọng trong bản đồ có thứ tự
- 25. Tầm quan trọng của phân cấp biểu định kiểu css
- 26. Liệu ngữ nghĩa có quan trọng trong Latex không? Nếu không, tai sao không?
- 27. Thứ tự của vị từ quan trọng khi sử dụng LINQ?
- 28. "Định nghĩa truy cập biến theo thứ tự sai" có nghĩa là gì trong Checkstyle?
- 29. Tương quan của Pearson có trọng số?
- 30. Tại sao thứ tự truy vấn phương tiện lại quan trọng trong CSS?
Đây là một câu hỏi được trả lời tốt nhất chỉ bằng cách thử. – erisco
Tôi đã thử nó và nó * xuất hiện * để hoạt động chính xác. Tuy nhiên, tương đối mới đối với PHP, tôi muốn đảm bảo rằng không có vấn đề gì bên dưới bề mặt có thể khiến tôi bực mình sau này. – TaylorOtwell
để nghĩ rằng người tạo khung công tác PHP phổ biến nhất là 'tương đối mới' đối với PHP chỉ 5 năm trước ... Công việc tốt @TaylorOtwell – dangel