Keluaran Mazmur 3.12, penganalisis statik untuk bahasa PHP. Keluaran Alpha PHP 8.0

Syarikat Vimeo ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° keluaran baru penganalisis statik Mazmur 3.12, yang membolehkan anda mengenal pasti ralat yang jelas dan halus dalam kod PHP, serta membetulkan beberapa jenis ralat secara automatik. Sistem ini sesuai untuk mengenal pasti masalah dalam kedua-dua kod warisan dan dalam kod yang menggunakan ciri moden yang diperkenalkan dalam cawangan baharu PHP. Kod projek ditulis dalam PHP dan diedarkan oleh di bawah lesen MIT.

Mazmur mengenal pasti kebanyakan masalah yang berkaitan dengan penggunaan jenis yang salah, serta pelbagai kesalahan biasa. Contohnya, ia menyokong amaran tentang mencampurkan pembolehubah pelbagai jenis dalam ungkapan, ujian logik yang salah (seperti β€œjika ($a && $a) {}”, β€œjika ($a && !$a) {}” dan β€œ jika ( $a) {} elseif ($a) {}"), permulaan yang tidak lengkap bagi sifat objek. Penganalisis berjalan dalam mod berbilang benang. Anda boleh melakukan imbasan tambahan, yang menganalisis hanya fail yang telah berubah sejak imbasan terakhir.

Selain itu, alat pengaturcaraan selamat disediakan untuk membolehkan gunakan anotasi dalam format Docblock (β€œ/** @var Type */”) untuk memberikan maklumat tentang jenis pembolehubah, nilai pulangan, parameter fungsi, sifat objek. Menentukan corak penggunaan jenis dan menggunakan pernyataan tegas juga disokong. Sebagai contoh:

/** @var string|null */
$a = foo();

/** @var string $a */
echo strpos($a, 'hello');

/** @psalm-assert-if-true B $a */
function isValidB(A $a): bool {
kembalikan $a instanceof B && $a->isValid();
}

Untuk mengautomasikan penghapusan masalah yang ditemui, utiliti Psalter disediakan, yang menyokong pemalam dan membolehkan selesaikan masalah masalah kod biasa, tambah anotasi jenis dan lakukan manipulasi seperti mengalihkan kelas dari satu ruang nama ke ruang nama yang lain, mengalihkan kaedah antara kelas dan menamakan semula kelas dan kaedah.

Dalam terbitan baru Mazmur dilaksanakan pilihan "--taint-analysis" membolehkan anda mengesan hubungan antara parameter input yang diterima daripada pengguna (contohnya, $_GET['name']) dan penggunaannya di tempat yang memerlukan watak melarikan diri (contohnya, gema " $nama "), termasuk melalui rantaian penjejakan tugasan perantaraan dan panggilan fungsi. Penggunaan tatasusunan bersekutu $_GET, $_POST dan $_COOKIE dianggap sebagai sumber data yang berpotensi berbahaya, tetapi ia juga mungkin ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ sumber sendiri. Tindakan yang memerlukan penjejakan melarikan diri termasuk operasi output yang menjana kandungan HTML, menambah pengepala HTTP atau melaksanakan pertanyaan SQL.

Pengesahan digunakan apabila menggunakan fungsi seperti echo, exec, include dan header. Apabila menganalisis keperluan untuk melarikan diri, jenis data seperti teks, rentetan dengan kod SQL, HTML dan Shell, rentetan dengan parameter pengesahan diambil kira. Mod yang dicadangkan membolehkan anda mengenal pasti kelemahan dalam kod yang membawa kepada skrip merentas tapak (XSS) atau penggantian SQL.

Di samping itu, ia boleh diperhatikan Mula ujian alfa cawangan PHP 8.0 baharu. Tayangannya dijadualkan pada 26 November. Perkara berikut dijangkakan di cawangan baharu: inovasiSebagai:

  • Inklusi Penyusun JIT, penggunaannya akan meningkatkan produktiviti.
  • Sokongan jenis kesatuan, mentakrifkan koleksi dua atau lebih jenis (contohnya, "fungsi awam foo(Foo|Bar $input): int|float;").
  • Sokongan sifat-sifat (anotasi) yang membolehkan anda mengikat metadata (seperti maklumat jenis) ke kelas tanpa menggunakan sintaks Docblock.
  • Sintaks dipendekkan definisi kelas, membolehkan anda menggabungkan definisi pembina dan sifat.
  • Jenis pemulangan baharu - statik.
  • Jenis baharu - bercampur, yang boleh digunakan untuk menentukan sama ada fungsi menerima parameter jenis yang berbeza.
  • Ungkapan membuang untuk mengendalikan pengecualian.
  • Peta Lemah untuk mencipta objek yang boleh dikorbankan semasa pengumpulan sampah (contohnya, untuk menyimpan cache yang tidak perlu).
  • Peluang menggunakan ungkapan "::class" untuk objek (sama dengan memanggil get_class()).
  • Peluang takrifan dalam blok tangkapan pengecualian yang tidak terikat kepada pembolehubah.
  • Peluang meninggalkan koma selepas elemen terakhir dalam senarai parameter fungsi.
  • Antara muka baharu Boleh bertali untuk mengenal pasti sebarang jenis rentetan atau data yang boleh ditukar kepada rentetan (yang kaedah __toString() tersedia).
  • Ciri baru str_contains(), analog strpos yang dipermudahkan untuk menentukan kejadian subrentetan, serta fungsi str_starts_with() dan str_ends_with() untuk menyemak padanan pada permulaan dan penghujung rentetan.
  • Fungsi tambahan fdiv(), yang melakukan operasi bahagi tanpa membuang ralat apabila membahagi dengan sifar.
  • Berubah logik penyambung rentetan. Sebagai contoh, ungkapan 'gema "jumlah:" . $a + $b' sebelum ini ditafsirkan sebagai 'echo ("sum: " . $a) + $b', dan dalam PHP 8 akan dianggap sebagai 'echo "sum: " . ($a + $b)'.
  • Diketatkan menyemak operasi aritmetik dan bit, sebagai contoh, ungkapan "[] ​​% [42]" dan "$object + 4" akan mengakibatkan ralat.
  • Dilaksanakan algoritma pengisihan yang stabil di mana susunan nilai yang sama dikekalkan merentasi larian yang berbeza.

Sumber: opennet.ru

Tambah komen