2010-08-11 31 views
19

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?

+0

Đây là một câu hỏi được trả lời tốt nhất chỉ bằng cách thử. – erisco

+5

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

+8

để 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

Trả lời

12

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ẽ.

+0

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

+0

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

0

Chỉ cần bao gồm chúng trước khi chúng cần và mọi thứ sẽ ổn.

0

Đ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.

-1

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 ...

2

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 đó.

+0

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

+0

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. –

-1

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.

+0

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. –

Các vấn đề liên quan