Phát hành Psalm 3.12, một công cụ phân tích tĩnh cho ngôn ngữ PHP. Bản phát hành alpha của PHP 8.0

Công ty Vimeo được phát hành phiên bản mới của máy phân tích tĩnh Thánh Vịnh 3.12, cho phép bạn xác định cả lỗi rõ ràng và lỗi tinh vi trong mã PHP, cũng như tự động sửa một số loại lỗi. Hệ thống này phù hợp để xác định các vấn đề cả về mã cũ và mã sử dụng các tính năng hiện đại được giới thiệu trong các nhánh mới của PHP. Mã dự án được viết bằng PHP và phân phối bởi theo giấy phép MIT.

Psalm xác định hầu hết các vấn đề liên quan đến việc sử dụng kiểu chữ không chính xác, cũng như các vấn đề khác nhau. những sai lầm điển hình. Ví dụ: nó hỗ trợ cảnh báo về việc trộn các biến thuộc các loại khác nhau trong một biểu thức, kiểm tra logic không chính xác (chẳng hạn như “if ($a && $a) {}”, “if ($a && !$a) {}” và “ if ($a) {} elseif ($a) {}"), việc khởi tạo các thuộc tính đối tượng không đầy đủ. Máy phân tích chạy ở chế độ đa luồng. Có thể thực hiện quét tăng dần, chỉ phân tích các tệp đã thay đổi kể từ lần quét cuối cùng.

Ngoài ra, các công cụ lập trình an toàn được cung cấp để cho phép sử dụng chú thích ở định dạng khối tài liệu (“/** @var Type */”) để cung cấp thông tin về loại biến, giá trị trả về, tham số hàm, thuộc tính đối tượng. Việc xác định các kiểu sử dụng kiểu và sử dụng các câu lệnh khẳng định cũng được hỗ trợ. Ví dụ:

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

/** @var string $a */
echo strpos($a, 'xin chào');

/** @psalm-assert-if-true B $a */
hàm isValidB(A $a): bool {
trả về $a instanceof B && $a->isValid();
}

Để tự động hóa việc loại bỏ các vấn đề được tìm thấy, tiện ích Psalter được cung cấp, hỗ trợ các plugin và cho phép khắc phục sự cố mã phổ biến, thêm chú thích kiểu và thực hiện các thao tác như di chuyển các lớp từ không gian tên này sang không gian tên khác, di chuyển các phương thức giữa các lớp cũng như đổi tên các lớp và phương thức.

Trong số mới của Thánh vịnh thực hiện tùy chọn "--taint-analysis" cho phép bạn theo dõi mối quan hệ giữa các tham số đầu vào nhận được từ người dùng (ví dụ: $_GET['name']) và việc sử dụng chúng ở những nơi yêu cầu thoát ký tự (ví dụ: echo " tên $ "), bao gồm thông qua chuỗi theo dõi các phép gán trung gian và lệnh gọi hàm. Việc sử dụng mảng kết hợp $_GET, $_POST và $_COOKIE được coi là nguồn dữ liệu nguy hiểm tiềm tàng, nhưng cũng có thể xảy ra xác định nguồn riêng. Các hành động yêu cầu thoát theo dõi bao gồm các hoạt động đầu ra tạo ra nội dung HTML, thêm tiêu đề HTTP hoặc thực thi các truy vấn SQL.

Xác thực được sử dụng khi sử dụng các hàm như echo, exec, include và header. Khi phân tích nhu cầu thoát, các loại dữ liệu như văn bản, chuỗi có mã SQL, HTML và Shell, chuỗi có tham số xác thực sẽ được tính đến. Chế độ được đề xuất cho phép bạn xác định các lỗ hổng trong mã dẫn đến tập lệnh chéo trang (XSS) hoặc thay thế SQL.

Ngoài ra, có thể ghi nhận bắt đầu thử nghiệm alpha của nhánh PHP 8.0 mới. Việc phát hành dự kiến ​​vào ngày 26 tháng XNUMX. Những điều sau đây được mong đợi ở chi nhánh mới: đổi mới, như:

  • Tăng sức mạnh Trình biên dịch JIT, việc sử dụng nó sẽ cải thiện năng suất.
  • Hỗ trợ các loại công đoàn, xác định các bộ sưu tập gồm hai loại trở lên (ví dụ: “public function foo(Foo|Bar $input): int|float;”).
  • Hỗ trợ thuộc tính (chú thích) cho phép bạn liên kết siêu dữ liệu (chẳng hạn như thông tin loại) với các lớp mà không cần sử dụng cú pháp Docblock.
  • Cú pháp rút gọn định nghĩa lớp, cho phép bạn kết hợp định nghĩa của hàm tạo và các thuộc tính.
  • Kiểu trả về mới - tĩnh.
  • Kiểu mới - hỗn hợp, có thể được sử dụng để xác định xem một hàm có chấp nhận các tham số thuộc các loại khác nhau hay không.
  • Biểu thức quăng để xử lý các trường hợp ngoại lệ.
  • Bản đồ yếu để tạo các đối tượng có thể bị hy sinh trong quá trình thu gom rác (ví dụ: để lưu trữ các bộ đệm không cần thiết).
  • Cơ hội sử dụng biểu thức “::class” cho các đối tượng (tương tự như gọi get_class()).
  • Cơ hội các định nghĩa trong khối bắt các ngoại lệ không bị ràng buộc với các biến.
  • Cơ hội để lại dấu phẩy sau phần tử cuối cùng trong danh sách tham số hàm.
  • Giao diện mới Có thể xâu chuỗi để xác định bất kỳ loại chuỗi hoặc dữ liệu nào có thể được chuyển đổi thành chuỗi (có sẵn phương thức __toString()).
  • Tính năng mới str_contains(), một dạng tương tự đơn giản của strpos để xác định sự xuất hiện của chuỗi con, cũng như các hàm str_starts_with() và str_ends_with() để kiểm tra sự trùng khớp ở đầu và cuối chuỗi.
  • Đã thêm chức năng fdiv(), thực hiện phép chia mà không gây ra lỗi khi chia cho XNUMX.
  • Đã thay đổi logic nối chuỗi. Ví dụ: biểu thức 'echo "sum:" . $a + $b' trước đây được hiểu là 'echo ("sum: " . $a) + $b' và trong PHP 8 sẽ được coi là 'echo "sum: " . ($a + $b)'.
  • Siết chặt kiểm tra các phép toán số học và bit, ví dụ: các biểu thức "[] % [42]" và "$object + 4" sẽ dẫn đến lỗi.
  • thực hiện một thuật toán sắp xếp ổn định trong đó thứ tự của các giá trị giống hệt nhau được giữ nguyên qua các lần chạy khác nhau.

Nguồn: opennet.ru

Thêm một lời nhận xét