it-swarm-id.com

Cara mengatasi peringatan `Standar ketat` untuk tanda tangan metode yang berbeda di seluruh versi Joomla

Dalam memperbarui ekstensi untuk mendukung Joomla 3.x kami telah mengalami beberapa kasus di mana tanda tangan untuk fungsi telah berubah sejak 2,5 dan menghasilkan peringatan Strict standards.

Sebagai contoh di kelas JTable _getAssetParentId() telah berubah dari

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

untuk ini di Joomla 3.x:

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

Ini perbedaan kecil tapi, cukup untuk memuntahkan peringatan.

Melihat ekstensi lain yang mendukung Joomla 2.5 dan 3.0 menggunakan file kelas tunggal, mereka tampaknya mengabaikan masalah tersebut.

Jelas, jika kita memperbaiki peringatan untuk 3.x maka 2.5 menginstal dengan membuang peringatan ...

"Solusi" yang bukan pilihan bagi kami meliputi:

  • menggunakan dua file kelas khusus versi terpisah
  • mematikan peringatan

Bagaimana Anda menyelesaikan konflik ini?

7
Craig

Di tempat kerja kami mencoba untuk menyelesaikan semua PHP peringatan, kesalahan, dan pelanggaran standar ketat. Dalam situasi seperti ini, di mana tanda tangan berbeda, tidak ada cara untuk menyelesaikannya dengan menggunakan dua kelas khusus versi terpisah, versi spesifik Saya ingin tahu mengapa itu bukan pilihan bagi Anda?

File kelas khusus versi sebenarnya mudah diimplementasikan, tetapi agak sulit dipertahankan, karena Anda akan memperbarui beberapa kode di banyak tempat. Hal terbaik untuk dilakukan dalam situasi ini, IMO, adalah memiliki root src/ folder yang menampung semua kelas komponen Anda untuk autoloading, lalu memiliki kelas khusus versi 2.5 atau 3.x dalam overrides/$VERSION folder. Anda kemudian dapat mengatur autoloader untuk mencari di tempat yang sesuai dalam urutan yang sesuai, berdasarkan versi saat ini.

Saya benar-benar berharap ada cara yang lebih mudah, tetapi PHP tidak memungkinkan kelebihan metode dinamis di mana Anda dapat membuat tanda tangan cocok.

9
Don Gilbert

Sepengetahuan saya, Anda tidak bisa menyelesaikan peringatan ketat ini. Karena tanda tangan akan selalu berbeda di 2,5 atau 3.x.

Baik perbaiki untuk 3.x dan abaikan dalam 2.5 atau sebaliknya.

Dalam lingkungan yang produktif, Anda tidak akan pernah melihat peringatan ini karena Anda hanya akan menunjukkan peringatan ketat dalam pengaturan pengembangan.

4
Bakual

Ada masalah besar dengan keadaan PHP, beberapa server masih menggunakan 5.2, sementara yang lain tetap aman di 5.3 atau 5.4. Ada juga beberapa yang tetap saat ini di 5,5.

Ini mengarah ke masalah utama dalam "apa yang harus didukung" Jika Anda pergi ke pasar dari berbagai versi, saya akan mengatakan 5.2 adalah yang paling banyak digunakan, tetapi tidak aman. 5.3 dan 5.4 adalah apa yang dicari Joomla di 3, namun jika pengguna berada di 5.5 peringatan standar yang ketat mungkin berbeda dari versi lainnya.

Meskipun PHP tidak melampaui kesalahan, seperti di dalamnya masih "berfungsi" peringatannya bahwa cara yang dilakukan bukanlah bagaimana versi saat ini dimaksudkan untuk menanganinya, tetapi masih akan Jadi, bagi sebagian besar pengembang, peringatan Pemberitahuan dan Standar Ketat sebagian besar dapat diabaikan karena jika Anda memperbaikinya, Anda dapat memicu yang lain di versi PHP) yang berbeda.

Menghapus semuanya adalah yang terbaik untuk pengembang OCD. Kesalahan yang jelas harus diperbaiki, tetapi yang seperti yang Anda jelaskan akan mengarah ke pemfokusan Joomla ke satu PHP versi terlalu banyak, yang mengarah ke lebih banyak pekerjaan untuk meningkatkan PHP versi juga.

Satu-satunya perbaikan yang benar untuk ini adalah di "bootstrap" Joomla untuk menguji versi PHP dan memuat file berdasarkan itu, ini dapat menyebabkan menggandakan ukuran instalasi basis Joomla, serta menjadi cara lebih banyak pekerjaan maka harus dilakukan untuk kesalahan yang tidak benar-benar menghancurkan situs mana pun.Jawaban Don Gilbert membahas hal ini menjadi lebih detail.

Jawaban saya agak aneh, tetapi saya merasa itu dapat membantu orang lain memahami kekacauan total PHP adalah.

1
Jordan Ramstad