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


7

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 Strict standardscảnh báo.

Ví dụ, trong lớp JTable, nó _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 với cảnh báo ném

"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?

Câu trả lời:


9

Tại nơi làm việc, chúng tôi cố gắng giải quyết tất cả các 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, nơi 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 tệp lớp riêng biệt, phiên bản cụ thể. Tôi tò mò mặc dù tại sao đó 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ó một src/thư mục gố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 một overrides/$VERSIONthư 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.


Đối với các tiện ích mở rộng mà chúng tôi cung cấp công khai thì đó không phải là vấn đề, chúng tôi sửa cho phiên bản Joomla mới nhất và để phiên bản cũ xử lý các cảnh báo. Mặc dù vậy, phần mở rộng được đề cập là dành cho một số khách hàng của chúng tôi có yêu cầu "bảo mật" cực kỳ cao mà mọi tiện ích mở rộng của bên thứ ba phải có thể chạy theo nghiêm ngặt mà không cần cảnh báo. Có vẻ như chúng ta sẽ có hai phiên bản trong tương lai.
Craig

4

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 ở mức 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.


Đúng, đây là suy nghĩ của chúng tôi, có vẻ như chúng tôi sẽ có hai phiên bản sắp tới.
Craig

1

Có một vấn đề lớn với tình trạng 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 qua được các lỗi, nhưng 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 phiên bản hiện tại có nghĩa là xử lý nó, nhưng vẫn sẽ hoạt động. Vì vậy, đối với hầu hết các nhà phát triển, các cảnh báo Tiêu chuẩn nghiêm ngặt và Thông báo 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 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 phiên bản PHP, dẫn đến việc nâng cấp phiên bản PHP của nó cũng nhiều hơn.

Cách khắc phục duy nhất cho vấn đề này là trong "bootstrap" của Joomla để kiểm tra phiên bản 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 xử lý nhiều lỗi hơn. không thực sự phá vỡ bất kỳ trang web. Câu trả lời của Don Gilbert đi sâu vào vấn đề này.

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ố PHP lộn xộn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.