Selepas enam tahun pembangunan, keluaran stabil pertama penganalisis statik PHPStan 1.0 berlaku, yang membolehkan anda mencari ralat dalam kod PHP tanpa melaksanakannya dan menggunakan ujian unit. Kod projek ditulis dalam PHP dan diedarkan di bawah lesen MIT.
Penganalisis menyediakan 10 tahap semakan, di mana setiap tahap berikutnya mengembangkan keupayaan tahap sebelumnya dan menyediakan semakan yang lebih ketat:
Contoh masalah asas yang dikenal pasti:
- Kewujudan kelas yang digunakan dalam instanceof, catch, typehints dan binaan bahasa lain.
- Kewujudan dan ketersediaan kaedah dan fungsi yang dipanggil, serta bilangan hujah yang diluluskan.
- Menyemak bahawa kaedah mengembalikan data dengan jenis yang sama seperti yang ditakrifkan dalam ungkapan pulangan.
- Kewujudan dan keterlihatan sifat yang sedang diakses, dan menyemak jenis data yang diisytiharkan dan sebenar yang digunakan dalam sifat.
- Bilangan parameter yang dihantar kepada panggilan sprintf/printf dalam blok pemformatan rentetan adalah betul.
- Kewujudan pembolehubah dengan mengambil kira blok yang dibentuk oleh operator cawangan dan gelung.
- Pancaran jenis tidak berguna (cth. "(rentetan) 'foo'") dan ujian ketat ("===" dan "!==") pada data dengan jenis dan operan berbeza yang sentiasa mengembalikan palsu.
Inovasi utama dalam PHPStan 1.0:
- Tahap semakan "9" telah dilaksanakan, yang menyemak penggunaan jenis "campuran", bertujuan untuk mengatur penerimaan fungsi parameter dengan jenis yang berbeza. Tahap XNUMX mengenal pasti penggunaan "bercampur" yang tidak selamat, seperti menghantar nilai jenis "bercampur" kepada jenis lain, memanggil kaedah jenis "bercampur", dan mengakses sifatnya kerana ia mungkin tidak wujud.
- Kawal sama ada nilai pulangan adalah sama untuk panggilan fungsi yang sama menggunakan anotasi @phpstan-pure dan @phpstan-impure.
- Taipkan analisis dalam binaan try-catch-finally menggunakan anotasi @throws.
- Pengenalpastian sifat dalaman (peribadi) yang ditakrifkan tetapi tidak digunakan, kaedah dan pemalar.
- Menghantar panggilan balik yang tidak serasi kepada fungsi tatasusunan seperti array_map dan usort.
- Pemeriksaan taip untuk anotasi petunjuk taip yang tiada.
- Membuat pengisytiharan jenis serasi dengan PHPDocs, membenarkan jenis daripada mesej ralat digunakan dalam PHPDocs.
Sumber: opennet.ru