PHP dili için statik bir analizör olan Mezmur 3.12'nin yayımlanması. PHP 8.0'ın alfa sürümü

Vimeo Şirketi yayınlanan Statik analizörün yeni sürümü Mezmur 3.12PHP kodundaki hem belirgin hem de incelikli hataları tanımlamanıza ve bazı hata türlerini otomatik olarak düzeltmenize olanak tanır. Sistem hem eski kodlardaki hem de PHP'nin yeni dallarında tanıtılan modern özellikleri kullanan kodlardaki sorunları tanımlamaya uygundur. Proje kodu PHP ile yazılmıştır ve tarafından dağıtıldı MIT lisansı altında.

Mezmur, yanlış yazı tipi kullanımıyla ilgili sorunların çoğunun yanı sıra çeşitli sorunları da tanımlar. tipik hatalar. Örneğin, bir ifadede farklı türdeki değişkenlerin karıştırılması, hatalı mantıksal testler ("if ($a && $a) {}", "if ($a && !$a) {}" ve " gibi) ile ilgili uyarıları destekler. if ( $a) {} elseif ($a) {}"), nesne özelliklerinin eksik başlatılması. Analizör çok iş parçacıklı modda çalışır. Yalnızca son taramadan bu yana değişen dosyaları analiz eden artımlı taramalar gerçekleştirmek mümkündür.

Ek olarak, güvenli programlama araçları da sağlanmaktadır. kullanmak biçimindeki ek açıklamalar Belge bloğu (“/** @var Type */”) değişken türleri, dönüş değerleri, işlev parametreleri, nesne özellikleri hakkında bilgi sağlamak için. Tür kullanım kalıplarının tanımlanması ve iddia ifadelerinin kullanılması da desteklenmektedir. Örneğin:

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

/** @var dize $a */
echo strpos($a, 'merhaba');

/** @mezmur-ifadesi-doğruysa B $a */
işlev isValidB(A $a) : bool {
return $a exampleof B && $a->isValid();
}

Bulunan sorunların ortadan kaldırılmasını otomatikleştirmek için eklentileri destekleyen Psalter yardımcı programı sağlanmıştır ve verir Yaygın kod sorunlarını giderin, tür açıklamaları ekleyin ve sınıfları bir ad alanından diğerine taşımak, yöntemleri sınıflar arasında taşımak ve sınıfları ve yöntemleri yeniden adlandırmak gibi işlemleri gerçekleştirin.

Mezmur'un yeni sayısında uygulandı "--taint-analiz" seçeneği, kullanıcıdan alınan giriş parametreleri (örneğin, $_GET['name']) ile bunların karakter kaçışı gerektiren yerlerdeki kullanımı (örneğin, echo ") arasındaki ilişkiyi izlemenize olanak tanır $isim "), ara atamaların ve işlev çağrılarının izleme zincirleri dahil. $_GET, $_POST ve $_COOKIE ilişkisel dizilerinin kullanımı potansiyel olarak tehlikeli veri kaynakları olarak kabul edilir, ancak bu aynı zamanda mümkündür tanım kendi kaynakları. İzlemeden kaçmayı gerektiren eylemler arasında HTML içeriği oluşturan, HTTP üstbilgileri ekleyen veya SQL sorguları yürüten çıktı işlemleri yer alır.

Doğrulama, echo, exec, include ve başlık gibi işlevler kullanılırken kullanılır. Kaçma ihtiyacı analiz edilirken metin, SQL, HTML ve Shell kodlu dizeler, kimlik doğrulama parametrelerine sahip dizeler gibi veri türleri dikkate alınır. Önerilen mod, kodda siteler arası komut dosyası çalıştırmaya (XSS) veya SQL değişikliğine yol açan güvenlik açıklarını tanımlamanıza olanak tanır.

Ek olarak, not edilebilir başlangıç Yeni PHP 8.0 dalının alfa testi. Yayının 26 Kasım'da yapılması planlanıyor. Yeni şubede aşağıdakiler bekleniyor: yeniliklerGibi:

  • içerme JIT derleyicisikullanımı üretkenliği artıracaktır.
  • Destek birlik türleri, iki veya daha fazla türden koleksiyonları tanımlamak (örneğin, "public function foo(Foo|Bar $input): int|float;").
  • Destek Öznitellikler (ek açıklamalar), Docblock sözdizimini kullanmadan meta verileri (tür bilgileri gibi) sınıflara bağlamanıza olanak tanır.
  • Kısaltılmış sözdizimi sınıf tanımları, bir yapıcının tanımını ve özelliklerini birleştirmenize olanak tanır.
  • Yeni dönüş türü - statik.
  • Yeni tip - karışıkBir işlevin farklı türdeki parametreleri kabul edip etmediğini belirlemek için kullanılabilir.
  • ifade atmak istisnaları ele almak için.
  • Zayıf Harita çöp toplama sırasında feda edilebilecek nesneler oluşturmak (örneğin, gereksiz önbellekleri depolamak için).
  • Fırsat nesneler için “::class” ifadesini kullanma (get_class() işlevini çağırmaya benzer).
  • Fırsat değişkenlere bağlı olmayan istisnaların catch bloğundaki tanımlar.
  • Fırsat işlev parametreleri listesindeki son öğeden sonra virgül bırakılır.
  • Yeni интерфейс dizilebilir dizeye dönüştürülebilecek herhangi bir dize türünü veya veriyi tanımlamak için (bunun için __toString() yöntemi kullanılabilir).
  • Yeni özellik str_contains(), bir alt dizenin oluşumunu belirlemek için strpos'un basitleştirilmiş bir analoğu ve ayrıca bir dizenin başındaki ve sonundaki eşleşmeleri kontrol etmek için str_starts_with() ve str_ends_with() işlevleri.
  • Eklenen işlev fdiv()Sıfıra bölme işleminde hata vermeden bölme işlemini gerçekleştiren.
  • Değiştirildi dize birleştirme mantığı. Örneğin, 'echo "sum:" ifadesi. $a + $b' daha önce 'echo ("sum: " . $a) + $b' olarak yorumlanıyordu ve PHP 8'de 'echo "sum: " olarak ele alınacak. ($a + $b)'.
  • Sıkılmış aritmetik ve bit işlemlerini kontrol etmek, örneğin "[] ​​% [42]" ve "$object + 4" ifadeleri hatayla sonuçlanacaktır.
  • uygulandı Farklı çalışmalarda aynı değerlerin sırasının korunduğu kararlı bir sıralama algoritması.

Kaynak: opennet.ru

Yorum ekle