Trang chủ Thủ Thuật Có gì mới trong PHPStan 1.0?

Có gì mới trong PHPStan 1.0?

0
23

Có gì mới trong PHPStan 1.0?

PHPStan logo

PHPStan đã đạt được một bản phát hành quan trọng vào đầu tháng 11 năm 2021 với các tính năng mới, quy tắc bổ sung và nhiều tối ưu hóa hiệu suất. Nó có nghĩa là trình phân tích tĩnh PHP hàng đầu hiện nay được coi là ổn định và đi kèm với lời hứa về khả năng tương thích ngược cho các bản cập nhật trong tương lai.

Vì đây là một cú hích lớn trong bán kỳ, PHPStan 1.0 cũng mang theo một số thay đổi đột phá có thể ảnh hưởng đến các bản quét hiện có của bạn. Chúng bao gồm các quy tắc bổ sung và một số thông số cấu hình được thay thế hoặc loại bỏ.

Cấp độ 9 mới

PHPStan quét mã nguồn PHP của bạn để tìm các vấn đề tiềm ẩn mà không thực sự chạy mã. Cùng với các bài kiểm tra đơn vị và đầu cuối, điều này cho bạn khả năng hiển thị về chất lượng mã của bạn bằng cách hiển thị các vấn đề trước khi người dùng gặp phải chúng.

Mức PHPStan được sử dụng để định cấu hình mức độ nghiêm ngặt của máy phân tích. Loạt phát hành v0.x cung cấp tám cấp độ, trong đó 0 cấp độ thoải mái nhất và 8 cấp độ nghiêm ngặt nhất. Mặc dù ưu tiên sử dụng mức nghiêm ngặt nhất có thể để có phạm vi phủ sóng tốt nhất, nhưng mức độ ít nghiêm ngặt hơn có thể giúp bạn giới thiệu PHPStan đến một cơ sở mã không hoàn hảo.

PHPStan 1.0 thêm cấp độ 9 như một tùy chọn mới. Nó bao gồm tất cả các quy tắc từ cấp 8 trở xuống, cũng như một kiểm tra bổ sung: so sánh loại mixed

Quảng cáo

Kiểu mixed xuất hiện trong PHP 8.0 như một cách để gõ rõ ràng giá trị “bất kỳ”. Vì mixed về cơ bản tương đương với một giá trị không định kiểu, nên sẽ không an toàn khi đưa ra bất kỳ giả định nào về mixed trông như thế nào.

Cấp thứ chín của PHPStan sẽ thực thi nghiêm ngặt điều này bằng cách báo cáo lỗi nếu bạn cố gắng chủ động sử dụng mixed trong mã của mình. Không được phép truy cập một thuộc tính hoặc gọi một phương thức vì bạn không thể biết liệu chúng có tồn tại hay không. Bạn chỉ có thể chuyển các giá trị qua các mixed khác khi quy tắc này đang hoạt động.

Để chọn tham gia vào hành vi mới, bạn sẽ cần thay đổi level: 8 thành level: 9 trong tệp cấu hình phpstan.neon của mình. PHPStan cũng hỗ trợ level: max làm bí danh cho cấp cao nhất. Nếu bạn đã sử dụng max , bạn sẽ tự động nhận được cấp 9 khi nâng cấp lên PHPStan 1.0.

Nhận thức tốt hơn trong các khối thử-bắt-cuối cùng

PHPStan hiện có suy luận kiểu tốt hơn và nhận thức biến đổi cho các khối try-catch-final. Nó sẽ sử dụng @throws để kiểm tra các loại ngoại lệ được đưa ra bởi từng hàm trong cơ sở mã của bạn. Sự hiểu biết này được sử dụng để thông báo cho các lần kiểm tra tính khả dụng có thể thay đổi trong các khối try-catch.

Dưới đây là một ví dụ chứng minh tại sao điều này lại quan trọng:

 / **
 * @throws DemoException
 * / function first ( ) { ném DemoException ( ) ; }
 
/ **
 * @throws OtherException
 * / function second ( ) { ném OtherException ( ) ; }
 
thử { $ first = first ( ) ; $ giây = giây ( ) ; }
catch ( DemoException $ ex ) { error_log ( $ giây ) ; }
catch (  Exception $ ex ) { error_log ( "Ngoại lệ chung" ) ; }

catch đầu tiên truy cập $second nhưng điều này sẽ không tồn tại khi DemoException bị bắt. PHPStan v1.0 sử dụng @throws để nhận ra điều này, vì vậy bạn sẽ được thông báo khi catch tham chiếu của bạn có thể là các biến không xác định. Các hàm không có @throws thường sẽ hoạt động giống như trước đây.

Kết quả của sự thay đổi này, polluteCatchScopeWithTryAssignments tùy chọnCatchScopeWithTryAssignments đã bị loại bỏ. Điều này được sử dụng để cho phép bạn truy cập các biến được đặt trong một try trong phần catch sau; nó không còn cần thiết nữa vì PHPStan hiện có thể xác định những biến nào có sẵn.

Phát hiện mã không sử dụng

PHPStan đã trở nên tốt hơn trong việc tìm kiếm và báo cáo một số dạng mã không sử dụng trong dự án của bạn. Nó sẽ làm nổi bật các thuộc tính, phương thức và hằng số của lớp private mà không bao giờ được gọi hoặc truy cập.

Quảng cáo

Sự hiện diện của họ hầu như luôn luôn là vô tình. Nếu bạn muốn giữ mã chết lâu hơn, bạn có thể thử bình luận nó ra hoặc thêm bình luận @phpstan-ignore-next-line để bỏ qua kiểm tra.

Cải tiến đối với các giá trị đã ghi nhớ

v1.0 nâng cao tính nhất quán của bộ nhớ PHPStan cho các giá trị trả về của hàm. Nó thành thạo hơn trong việc hiểu khi nào một hàm được gọi lần thứ hai, đưa ra dự đoán tốt hơn về các giá trị trả về giống hệt nhau.

Điều này dẫn đến cải thiện khả năng phát hiện mã chết khi một điều kiện được lặp lại nhiều lần. PHPStan sẽ cảnh báo khi một khối trở nên dư thừa vì việc thực thi bị kết thúc bởi một nhánh trước đó với cùng một điều kiện:

 if ( $ demo -> isActive ( ) ) { return ; }
 
if ( $ demo -> isActive ( ) ) {
    recordDemoActivity ( ) ; }

Khối thứ hai sẽ không bao giờ chạy vì khối đầu tiên luôn kết thúc. Tuy nhiên, có một giả định khi chơi: isActive() phải luôn trả về cùng một giá trị trong suốt thời gian tồn tại của $demo . Nói một cách cụ thể hơn, isActive() cần phải là một hàm thuần túy trong đó các đầu vào lặp lại luôn tạo ra đầu ra giống hệt nhau.

PHPStan giả định các chức năng là thuần túy theo mặc định. Trong trường hợp không có, bạn có thể thêm @phpstan-impure vào docblock phía trên định nghĩa của hàm. Điều này sẽ vô hiệu hóa bộ nhớ giá trị trả về cho chức năng đó. Bạn cần phải sử dụng điều này trong ví dụ trên nếu isActive() có thể trả về một giá trị khác nhau cho mỗi lệnh gọi, có nghĩa là lần kiểm tra đầu tiên có thể tương đương với false và cho phép nhánh thứ hai chạy.

 / ** @ phpstan-impure * / public function isActive ( ) : bool { return ( date ( "Y" ) === "2021" ) ; }

Các cải tiến quy tắc khác

Một số quy tắc mới đã được thêm vào các cấp hiện có từ 1 đến 6. Các quy tắc này bao gồm kiểm tra ghi đè các hằng số và thuộc tính, cố gắng mở rộng final và phát hiện các điều kiện vòng lặp luôn đúng và luôn sai while

Quảng cáo

Các kiểu hiện đã được kiểm tra đệ quy các kiểu chữ bị thiếu. Điều này có nghĩa là các định nghĩa PHPDoc như array<array> sẽ không được chấp nhận vì chúng thiếu định nghĩa kiểu bên trong. Bạn cũng sẽ cần nhập các giá trị mong đợi của các phần tử mảng cấp hai, chẳng hạn như array<array<string>> .

Bên cạnh việc kiểm tra nội dung nguồn, PHPStan 1.0 cũng xem xét tính hợp lệ tổng thể của các tệp .php Mức 0 được kiểm tra khoảng trắng ở đầu và cuối tệp và BOM, vì các ký tự đặt sai vị trí trước hoặc sau cặp <?php ... ?> Có thể gây ra kết quả không mong muốn trong thời gian chạy.

Hiệu suất và sự ổn định

Hiệu suất đã được cải thiện trong một số lĩnh vực bằng cách tối ưu hóa các hoạt động cụ thể và giải quyết một số lỗi rò rỉ bộ nhớ. Những điều này sẽ góp phần quét các cơ sở mã lớn hơn nhanh hơn và đáng tin cậy hơn.

Vì v1.0 được coi là một bản phát hành ổn định chính thức, nó đi kèm với sự đảm bảo rằng các bản phát hành nhỏ trong tương lai (1.1, 1.2, 1.3, v.v.) sẽ tương thích ngược. Mặc dù việc chuyển từ v0.x sang v1.0 có thể yêu cầu một số chỉnh sửa về cấu hình, nhưng bạn sẽ có một lộ trình di chuyển dễ dàng hơn trong tương lai.

Các nhà phát triển tiện ích mở rộng PHPStan và bộ quy tắc tùy chỉnh cũng được hưởng lợi từ việc có một cơ sở mã ổn định hơn và ít có khả năng thay đổi hơn. Tài liệu dành cho nhà phát triển cũng đã được mở rộng, bao gồm phạm vi dễ tiếp cận hơn về việc tạo quy tắc tùy chỉnh. Sẽ dễ dàng hơn để bắt đầu khi triển khai các quy tắc riêng của nhóm vào phân tích PHPStan của bạn.

Quảng cáo

Mặc dù điều này báo hiệu tốt cho sự hỗ trợ trong tương lai, nhưng cả người dùng và nhà phát triển tiện ích mở rộng đều phải đối mặt với những thay đổi đột phá khi chuyển sang phiên bản 1.0. Một số tham số cấu hình quét đã được đổi tên hoặc thay đổi, trong đó bootstrap trở thành bootstrapFilesexcludes_analyse thay thế excludePaths .

Nội bộ API của phần mở rộng đã được sửa đổi rộng rãi nên nhiều lớp và phương thức đã được thay đổi hoặc loại bỏ. Danh sách đầy đủ các thay đổi không tương thích ngược có sẵn trong bản thay đổi v1.0.

Tóm lược

PHPStan v1.0 hoàn thiện dự án bằng cách tối ưu hóa hiệu suất, thêm các quy tắc mới và giải quyết một số bất thường phát hiện. Sự phát triển của PHPStan trong vài năm qua đã góp phần hướng tới sự thay đổi rộng rãi hơn của cộng đồng PHP để nắm lấy các khái niệm ngôn ngữ được đánh máy. Việc bổ sung các tính năng như thuộc tính đã nhập và kiểu liên kết đã tạo ra một ngôn ngữ có khả năng hỗ trợ kiểm tra bên ngoài nâng cao, cũng như xem xét chi tiết bên trong thông qua phản ánh.

Việc quảng bá cho một bản phát hành ổn định bán kỳ sẽ giúp khuyến khích thêm PHPStan trong cộng đồng. Việc di chuyển sang phiên bản mới sẽ khá dễ dàng đối với các dự án hiện đại đã sử dụng mức quy tắc PHPStan nghiêm ngặt.

Bạn có thể nâng cấp lên PHPStan v1.0 ngay hôm nay bằng cách chạy trình composer require phpstan/phpstan trong các dự án của mình. Trước tiên, bạn nên đọc qua các ghi chú phát hành để xác định những thay đổi cơ bản mà bạn cần giải quyết. Sự hiện diện của các quy tắc bổ sung trong mỗi cấp độ hiện có có thể khiến cơ sở mã của bạn bắt đầu kiểm tra không thành công ngay cả khi nó đã vượt qua với PHPStan v0.x. Bạn có thể tạm thời vô hiệu hóa các quy tắc mới bằng cách thêm chúng vào đường cơ sở của mình để chúng bị loại trừ khỏi kết quả quét.

How to View Kubernetes Pod Logs With Kubectl

Cách xem nhật ký Kubernetes Pod với Kubectl

How to Assign a Static IP to a Docker Container

Cách gán IP tĩnh cho vùng chứa Docker

What Is RansomCloud, And How Do You Protect Yourself?

RansomCloud là gì và bạn tự bảo vệ mình như thế nào?

How to Remove Git Version Tracking from a Folder

Cách xóa theo dõi phiên bản Git khỏi thư mục

How to Assign a Static IP to a Docker Container

Docker lưu giữ tệp nhật ký ở đâu?

How to View the Remote URL a Github Repository Was Cloned From

Cách xem URL từ xa một kho lưu trữ Github đã được sao chép từ

Dịch từ: https://www.cloudsavvyit.com/14669/whats-new-in-phpstan-1-0/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây