Ini adalah sekumpulan sniff untuk PHP CodeSniffer yang memeriksa kompatibilitas lintas versi PHP. Ini akan memungkinkan Anda menganalisis kode Anda untuk kompatibilitas dengan versi PHP yang lebih tinggi dan lebih rendah.
testVersion
di kumpulan aturan versus baris perintahProyek ini bertujuan untuk mencakup semua perubahan kompatibilitas PHP yang diperkenalkan sejak PHP 5.0 hingga rilis PHP terbaru. Hal ini merupakan proses yang berkelanjutan dan cakupannya belum 100% (jika memang bisa tercapai). Kemajuan dilacak di pelacak masalah GitHub kami.
Permintaan penarikan yang memeriksa masalah kompatibilitas dalam kode PHP 4 - khususnya antara PHP 4 dan PHP 5.0 - sangat diterima karena masih ada situasi di mana orang memerlukan bantuan untuk meningkatkan sistem lama. Namun, cakupan perubahan yang diperkenalkan sebelum PHP 5.1 akan tetap tidak merata karena sniff untuk hal ini belum dikembangkan secara aktif saat ini.
Sniff dirancang untuk memberikan hasil yang sama terlepas dari versi PHP mana yang Anda gunakan untuk menjalankan PHP CodeSniffer. Anda harus mendapatkan hasil yang konsisten terlepas dari versi PHP yang digunakan dalam lingkungan pengujian Anda, meskipun untuk hasil terbaik disarankan untuk menjalankan sniffs pada versi PHP terbaru yang dikombinasikan dengan versi PHP_CodeSniffer terbaru.
Pada versi 8.0.0, standar PHPCompatibility juga dapat digunakan dengan PHP CodeSniffer 3.x. Pada versi 9.0.0, dukungan untuk PHP CodeSniffer 1.5.x dan versi rendah 2.x <2.3.0 telah dihentikan. Pada versi 10.0.0, dukungan untuk PHP <5.4 dan PHP CodeSniffer <3.10.0 telah dihentikan.
Terima kasih kepada semua kontributor atas kontribusinya yang berharga.
Terima kasih kepada WP Engine atas dukungan mereka pada sniffing PHP 7.0.
Perpustakaan ini telah ditata ulang. Semua sniff telah ditempatkan dalam kategori dan sejumlah besar sniff telah diganti namanya.
Jika Anda menggunakan standar PHPCompatibility
lengkap tanpa arahan exclude
dalam kumpulan aturan khusus dan (belum) menggunakan anotasi PHP_CodeSniffer gaya baru seperti yang diperkenalkan di PHP_CodeSniffer 3.2.0, ini tidak akan memiliki efek nyata dan semuanya akan berfungsi seperti sebelumnya.
Namun, jika Anda menggunakan arahan exclude
untuk mengendus PHPCompatibility dalam kumpulan aturan khusus atau jika Anda menggunakan anotasi sebaris PHP_CodeSniffer gaya baru, Anda perlu memperbaruinya saat melakukan peningkatan. Perubahan ini seharusnya hanya terjadi satu kali saja. Changelog berisi informasi rinci tentang semua penggantian nama sniff.
Harap baca log perubahan untuk versi 9.0.0 dengan cermat sebelum melakukan peningkatan.
require-dev
pada file composer.json
Anda. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
Jika PHPCompatibility adalah satu-satunya standar PHP CodeSniffer eksternal yang Anda gunakan, Anda dapat menambahkan yang berikut ini ke file composer.json
untuk menjalankan perintah yang diperlukan secara otomatis:
"scripts" : {
"post-install-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility " ,
"post-update-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility "
}
Sebagai alternatif - dan sangat disarankan jika Anda menggunakan lebih dari satu standar PHP CodeSniffer eksternal - Anda dapat menggunakan salah satu plugin Komposer berikut untuk menanganinya untuk Anda.
Cukup tambahkan plugin Composer yang Anda sukai ke bagian require-dev
pada file composer.json
Anda.
Sebagai alternatif terakhir jika Anda menggunakan kumpulan aturan khusus, Anda dapat memberi tahu PHP CodeSniffer jalur ke standar PHPCompatibility dengan menambahkan cuplikan berikut ke kumpulan aturan khusus Anda:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
untuk menginstal PHP CodeSniffer, standar pengkodean PHPCompatibility dan - opsional - plugin Composer../vendor/bin/phpcs -i
pada baris perintah. Kompatibilitas PHP harus terdaftar sebagai salah satu standar yang tersedia../vendor/bin/phpcs -p . --standard=PHPCompatibility
Instal PHP CodeSniffer melalui metode pilihan Anda.
PHP CodeSniffer menawarkan berbagai metode instalasi yang sesuai dengan alur kerja Anda: Komposer, PEAR, file Phar, arsip rilis zip/tar atau memeriksa repositori menggunakan Git.
Tip pro: Daftarkan jalur ke PHPCS di variabel lingkungan $PATH
sistem Anda untuk membuat perintah phpcs
tersedia dari mana saja di sistem file Anda.
Unduh rilis PHPCompatibility terbaru dan unzip/untar ke direktori sembarang.
Anda juga dapat memilih untuk mengkloning repositori menggunakan git agar mudah memperbarui instalasi Anda secara berkala.
Tambahkan jalur ke direktori tempat Anda meletakkan salinan repo PHPCompatibility ke konfigurasi PHP CodeSniffer menggunakan perintah di bawah ini dari baris perintah:
phpcs --config-set installed_paths /path/to/PHPCompatibility
Yaitu jika Anda menempatkan repositori PHPCompatibility
di direktori /my/custom/standards/PHPCompatibility
, Anda perlu menambahkan direktori tersebut ke variabel konfigurasi PHP CodeSniffer installed_paths
.
Peringatan :installed_paths
menimpa semua installed_paths
yang ditetapkan sebelumnya. Jika sebelumnya Anda telah menetapkan installed_paths
untuk standar eksternal lainnya, jalankan phpcs --config-show
terlebih dahulu lalu jalankan perintah installed_paths
dengan semua jalur yang Anda perlukan dipisahkan dengan koma, yaitu:
phpcs --config-set installed_paths /path/1,/path/2,/path/3
Tips profesional: Sebagai alternatif, jika Anda menggunakan kumpulan aturan khusus, Anda dapat memberi tahu PHP CodeSniffer jalur ke standar PHPCompatibility dengan menambahkan cuplikan berikut ke kumpulan aturan khusus Anda:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
Verifikasi bahwa standar PHPCompatibility telah terdaftar dengan benar dengan menjalankan phpcs -i
pada baris perintah. Kompatibilitas PHP harus terdaftar sebagai salah satu standar yang tersedia.
Sekarang Anda dapat menggunakan perintah berikut untuk memeriksa kode Anda:
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
.testVersion
untuk diperiksa. Itu akan memungkinkan pemeriksaan untuk fitur PHP yang tidak digunakan lagi/dihapus serta deteksi kode menggunakan fitur PHP baru.--runtime-set testVersion 5.5
ke perintah baris perintah Anda.--runtime-set testVersion 5.3-5.5
.--runtime-set testVersion 7.0-
untuk menjalankan semua pemeriksaan untuk PHP 7.0 dan yang lebih baru.--report-full=path/to/report-file
. Untuk informasi lebih lanjut dan opsi pelaporan lainnya, periksa wiki PHP CodeSniffer.Pada pertengahan tahun 2018, serangkaian kerangka kerja/aturan khusus CMS terbatas telah tersedia. Kumpulan aturan ini dihosting di repositori mereka sendiri.
PHPCompatibilityJoomla
GitHub | ahli pengemasanPHPCompatibilityWP
GitHub | ahli pengemasanSejak musim gugur tahun 2018, ada juga sejumlah aturan khusus polyfill PHP yang tersedia:
PHPCompatibilityPasswordCompat
GitHub | Packagist: akun untuk perpustakaan polyfill password_compat
@ircmaxell.PHPCompatibilityParagonie
GitHub | Packagist: berisi dua kumpulan aturan yang masing-masing memperhitungkan pustaka polyfill Paragonie random_compat
dan sodium_compat
.PHPCompatibilitySymfony
GitHub | Packagist: berisi sejumlah aturan yang memperhitungkan berbagai perpustakaan polyfill PHP yang ditawarkan oleh proyek Symfony. Untuk detail selengkapnya tentang kumpulan aturan yang tersedia, silakan lihat README dari repositori PHPCompatibilitySymfony. Jika Anda ingin memastikan semua aturan PHPCompatibility tersedia kapan saja, Anda dapat menggunakan paket PHPCompatibilityAll
GitHub | ahli pengemasan.
PENTING: Aturan khusus Framework/CMS/Polyfill tidak menetapkan versi PHP minimum untuk proyek Anda, jadi Anda masih harus melewati testVersion
untuk mendapatkan hasil yang paling akurat.
Seperti standar PHP CodeSniffer lainnya, Anda dapat menambahkan PHPCompatibility ke kumpulan aturan PHP CodeSniffer khusus.
<? xml version = " 1.0 " ?>
< ruleset name = " Custom ruleset " >
< description >My rules for PHP CodeSniffer</ description >
<!-- Run against the PHPCompatibility ruleset -->
< rule ref = " PHPCompatibility " />
<!-- Run against a second ruleset -->
< rule ref = " PSR2 " />
</ ruleset >
Anda juga dapat menyetel testVersion
dari dalam kumpulan aturan:
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />
Opsi lanjutan lainnya, seperti mengubah jenis pesan atau tingkat keparahan sniff yang dipilih, seperti yang dijelaskan di halaman wiki kumpulan aturan Beranotasi PHPCS, tentu saja, juga didukung.
testVersion
di kumpulan aturan versus baris perintah Di PHPCS 3.2.0 dan yang lebih rendah, setelah Anda menyetel testVersion
di kumpulan aturan, Anda tidak dapat lagi mengesampingkannya dari baris perintah. Dimulai dengan PHPCS 3.3.0, set testVersion
melalui baris perintah akan mengesampingkan testVersion
dalam kumpulan aturan.
Hal ini memungkinkan lebih banyak fleksibilitas ketika, misalnya, proyek Anda harus mematuhi PHP 5.5-
, tetapi Anda memiliki file bootstrap yang harus kompatibel dengan PHP 5.2-
.
Saat ini, ada dua sniff yang memiliki properti yang dapat diatur melalui aturan. Properti khusus lainnya mungkin tersedia di masa mendatang.
Sniff PHPCompatibility.Extensions.RemovedExtensions
memeriksa ekstensi yang dihapus berdasarkan awalan fungsi yang digunakan untuk ekstensi ini. Ini mungkin berbenturan dengan fungsi userland yang menggunakan awalan fungsi yang sama.
Untuk memasukkan fungsi-fungsi userland ke dalam daftar putih, Anda dapat meneruskan daftar nama fungsi yang dipisahkan koma ke sniff.
<!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
< rule ref = " PHPCompatibility.Extensions.RemovedExtensions " >
< properties >
< property name = " functionWhitelist " type = " array " value = " mysql_to_rfc3339,mysql_another_function " />
</ properties >
</ rule >
Sniff PHPCompatibility.Interfaces.RemovedSerializable
perlu mengetahui semua antarmuka yang memperluas antarmuka Serializable
untuk memberikan hasil yang paling andal. Sniff akan memperingatkan ketika menemukan antarmuka yang memperluas antarmuka Serializable
yang tidak diketahui oleh sniff dan merekomendasikan agar nama antarmuka ditambahkan ke properti.
Untuk memberi tahu sniffer tentang antarmuka tambahan yang menyediakan antarmuka Serializable, tambahkan cuplikan di sepanjang baris di bawah ini ke kumpulan aturan khusus Anda:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
Ada ratusan proyek publik yang menggunakan PHPCompatibility atau perluasan di atasnya. Daftar singkat beberapa yang mungkin Anda ketahui atau lihat:
Kontribusi sangat diharapkan. Silakan baca dokumentasi KONTRIBUSI untuk memulai.
Kode ini dirilis di bawah GNU Lesser General Public License (LGPL). Untuk informasi lebih lanjut, kunjungi http://www.gnu.org/copyleft/lesser.html