it-swarm-vi.com

Cách giải quyết cảnh báo `Tiêu chuẩn nghiêm ngặt 'cho các chữ ký phương thức khác nhau trên các phiên bản Joomla

Khi cập nhật tiện ích mở rộng để hỗ trợ Joomla 3.x, chúng tôi đã gặp phải một vài trường hợp chữ ký cho hàm đã thay đổi kể từ 2.5 và dẫn đến cảnh báo Strict standards.

Ví dụ: trong lớp JTable, _getAssetParentId() đã thay đổi từ

protected function _getAssetParentId($table = null, $id = null)
{
    ...
}

về điều này trong Joomla 3.x:

protected function _getAssetParentId(JTable $table = null, $id = null)
{
    ...
}

Đó là một sự khác biệt nhỏ, nhưng, nó đủ để đưa ra cảnh báo.

Nhìn vào các phần mở rộng khác hỗ trợ Joomla 2.5 và 3.0 bằng một tệp lớp duy nhất, chúng dường như chỉ đơn giản bỏ qua vấn đề.

Rõ ràng, nếu chúng tôi sửa cảnh báo cho 3.x thì 2.5 cài đặt bằng cách ném cảnh báo

"Giải pháp" không phải là một lựa chọn cho chúng tôi bao gồm:

  • sử dụng hai tệp lớp cụ thể phiên bản riêng biệt
  • tắt cảnh báo

Làm thế nào để bạn giải quyết xung đột này?

7
Craig

Tại nơi làm việc, chúng tôi cố gắng giải quyết tất cả PHP cảnh báo, lỗi và vi phạm tiêu chuẩn nghiêm ngặt. Trong các tình huống như thế này, khi chữ ký khác nhau, không có cách nào giải quyết vấn đề khác bằng cách sử dụng hai lớp cụ thể, phiên bản riêng biệt Tôi đang tò mò mặc dù đó không phải là một lựa chọn cho bạn?

Các tệp lớp cụ thể của phiên bản thực sự đơn giản để thực hiện, nhưng khó bảo trì hơn một chút, vì bạn sẽ cập nhật một số mã ở nhiều nơi. Điều tốt nhất để làm trong tình huống này, IMO, là có root src/ thư mục chứa tất cả các lớp thành phần của bạn để tự động tải, sau đó có bất kỳ lớp cụ thể phiên bản 2.5 hoặc 3.x nào trong overrides/$VERSION thư mục. Sau đó, bạn có thể thiết lập trình tải tự động để tìm ở những nơi thích hợp theo thứ tự phù hợp, dựa trên phiên bản hiện tại.

Tôi thực sự muốn có một cách dễ dàng hơn, nhưng PHP không cho phép nạp chồng phương thức động nơi bạn có thể làm cho chữ ký khớp.

9
Don Gilbert

Theo hiểu biết của tôi, bạn không thể giải quyết cảnh báo nghiêm ngặt này. Bởi vì chữ ký sẽ luôn khác nhau trong 2,5 hoặc 3.x.

Hoặc sửa nó cho 3.x và bỏ qua trong 2.5 hoặc ngược lại.

Trong một môi trường năng suất, dù sao bạn cũng không bao giờ nên thấy cảnh báo này vì bạn chỉ nên hiển thị các cảnh báo nghiêm ngặt trong cài đặt phát triển.

4
Bakual

Có một vấn đề lớn với trạng thái của PHP, một số máy chủ vẫn sử dụng 5.2, trong khi những máy chủ khác vẫn an toàn ở mức 5.3 hoặc 5.4. Ngoài ra còn có một số vẫn duy trì ở mức 5,5.

Điều này dẫn đến một vấn đề lớn trong "hỗ trợ gì" Nếu bạn đi theo thị trường của các phiên bản khác nhau, tôi sẽ nói 5.2 là phiên bản được sử dụng rộng rãi nhất, nhưng không an toàn. 5.3 và 5.4 là những gì Joomla tìm kiếm trong 3, tuy nhiên nếu người dùng ở 5.5, các cảnh báo tiêu chuẩn nghiêm ngặt có thể khác với các phiên bản khác.

Mặc dù PHP không vượt quá các lỗi, vì trong đó nó vẫn "hoạt động" cảnh báo rằng cách thức thực hiện không phải là cách xử lý phiên bản hiện tại, nhưng vẫn sẽ Vì vậy, đối với hầu hết các nhà phát triển, hầu hết các cảnh báo về Thông báo và Tiêu chuẩn nghiêm ngặt có thể bị bỏ qua vì nếu bạn sửa một lỗi, bạn có thể kích hoạt một cái khác trong phiên bản PHP khác.

Loại bỏ tất cả chúng là tốt nhất cho một nhà phát triển OCD. Lỗi rõ ràng nên được sửa, nhưng những lỗi như bạn mô tả sẽ dẫn đến việc tập trung Joomla vào một PHP thành nhiều, dẫn đến nhiều công việc hơn để nâng cấp PHP phiên bản là tốt.

Cách khắc phục duy nhất cho vấn đề này là trong "bootstrap" của Joomla để kiểm tra PHP và tải các tệp dựa trên đó, điều này có thể dẫn đến tăng gấp đôi kích thước cài đặt cơ sở Joomla, cũng như cách Nhiều công việc sau đó nên được thực hiện cho các lỗi không thực sự phá vỡ bất kỳ trang web nào. Câu trả lời của Don Gilbert đi sâu vào vấn đề này chi tiết hơn.

Câu trả lời của tôi khá kỳ quặc, nhưng tôi cảm thấy nó có thể giúp người khác hiểu tổng số lộn xộn PHP là.

1
Jordan Ramstad