Hướng dẫn phpstan covariance - hiệp phương sai phpstan

Chủ đề: PHPStan covariance

Hướng dẫn phpstan covariance - hiệp phương sai phpstan

Hướng dẫn phpstan type

PHPStan là một hệ thống phân tích tĩnh cho các dự án PHP. Nó tìm thấy lỗi trong cơ sở mã của bạn bằng cách kiểm tra các tệp nguồn. Bạn không phải chạy mã ...

Hướng dẫn phpstan covariance - hiệp phương sai phpstan

How do i download phpcs?

AboutPHP_CodeSniffer is a set of two PHP scripts; the main phpcs script that tokenizes PHP, JavaScript and CSS files to detect violations of a defined coding standard, and a second phpcbf script to ...

Hướng dẫn phpstan covariance - hiệp phương sai phpstan

Covariance between two time series python

View DiscussionImprove ArticleSave ArticleReadDiscussView DiscussionImprove ArticleSave ArticlePython is a great language for doing data analysis, primarily because of the fantastic ecosystem of ...

  • Trước
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Sau

PHPStan là một hệ thống phân tích tĩnh cho các dự án PHP. Nó tìm thấy lỗi trong cơ sở mã của bạn bằng cách kiểm tra các tệp nguồn. Bạn không phải chạy mã của mình hoặc viết các bài kiểm tra theo cách thủ công để phát hiện các vấn đề!

Thuật ngữ “phân tích tĩnh” được định nghĩa là mã gỡ lỗi mà không thực sự thực thi nó. Nó chủ yếu được sử dụng với các ngôn ngữ thông dịch, chẳng hạn như PHP, vì các vấn đề mà nó gặp phải có xu hướng xuất hiện ở giai đoạn biên dịch trong các ngôn ngữ đã biên dịch.

Phân tích tĩnh thường cho kết quả tốt nhất khi được thực hiện trong một cơ sở mã có cấu trúc tốt, được đánh máy cao. Tài liệu của PHPStan chỉ ra rằng “mã hướng đối tượng hiện đại” được hưởng lợi nhiều nhất, vì các dự án này cung cấp cho PHPStan nhiều thông tin hơn để làm việc.

Thêm PHPStan vào dự án của bạn

Để sử dụng PHPStan, bạn cần PHP 7.1 hoặc mới hơn. Yêu cầu này chỉ áp dụng cho phiên bản PHP được sử dụng để chạy PHPStan. Công cụ này có thể phân tích các tệp nguồn nhắm mục tiêu đến các phiên bản PHP cũ hơn.

Bạn nên sử dụng Composer để thêm PHPStan làm phụ thuộc:

composer require --dev phpstan/phpstan

Tệp PHPStan nhị phân sẽ được thêm vào dự án của bạn tại vendor/bin/phpstan. Bây giờ bạn có thể sử dụng nó để phân tích codebase của mình lần đầu tiên:

vendor/bin/phpstan analyse src

Lệnh trên sẽ chạy các bài kiểm tra của PHPStan cho tất cả các tệp nguồn trong src danh mục. Tùy thuộc vào kích thước cơ sở mã của bạn, quá trình này có thể mất vài phút.

Bạn thấy một màu xanh lá cây “[OK] Không có sai sót ”nếu tất cả các bài kiểm tra vượt qua. Nếu không, danh sách các lỗi được tìm thấy sẽ được hiển thị. Làm theo hướng dẫn được hiển thị để giải quyết mọi lỗi trước khi khởi động lại PHPStan.

Các loại và mức độ lỗi

PHPStan bao gồm rất nhiều điều khiển cho nhiều vấn đề tiềm ẩn về codebase. Một số điều phổ biến nhất bạn sẽ gặp bao gồm:

  • Gõ vấn đề hệ thống – Gán giá trị không hợp lệ cho thuộc tính đã định hoặc chuyển các tham số được nhập sai cho một phương thức. Điều này cũng bao gồm các vấn đề hợp đồng chẳng hạn như một lớp triển khai giao diện không đúng cách. – Gán giá trị không hợp lệ cho thuộc tính đã định hoặc chuyển các tham số được nhập sai cho một phương thức. Điều này cũng bao gồm các vấn đề hợp đồng chẳng hạn như một lớp triển khai giao diện không đúng cách.
  • Các cuộc gọi hàm – Truyền quá nhiều hoặc quá ít tham số khi gọi một hàm hoặc phương thức (ví dụ: 3 thay vì 4). – Truyền quá nhiều hoặc quá ít tham số khi gọi một hàm hoặc phương thức (ví dụ: 3 thay vì 4).
  • Các lớp, phương thức và hàm không xác định – Cố gắng sử dụng thứ gì đó không tồn tại trong codebase. – Cố gắng sử dụng thứ gì đó không tồn tại trong codebase.
  • Quyền truy cập vào các biến không xác định / có thể không xác định – Cố gắng sử dụng một biến không được xác định trong một phạm vi nhất định, hoặc biến đó không phải lúc nào cũng có giá trị, nhưng được sử dụng trong ngữ cảnh giả định. – Cố gắng sử dụng một biến không được xác định trong một phạm vi nhất định, hoặc biến đó không phải lúc nào cũng có giá trị, nhưng được sử dụng trong ngữ cảnh giả định.
  • Kiểm tra mã chết – Đánh dấu mã vô dụng, chẳng hạn như phương trình Boolean luôn dẫn đến cùng một giá trị và các nhánh mã không bao giờ được thực thi (ví dụ: Mã theo sau a return câu lệnh bên trong các hàm). – Đánh dấu mã vô dụng, chẳng hạn như phương trình Boolean luôn dẫn đến cùng một giá trị và các nhánh mã không bao giờ được thực thi (ví dụ: Mã theo sau a return câu lệnh bên trong các hàm).

Các quy tắc được chia thành 9 “cấp độ” khác nhau, được dán nhãn từ 0 đến 8. Cấp độ đặc biệt max hoạt động như một bí danh cho cấp cao nhất có thể. Theo thời gian, PHPStan có thể thêm các cấp số bổ sung, vì vậy được sử dụng max đảm bảo rằng bạn luôn được kiểm tra chặt chẽ nhất có thể.

PHPStan đầu ra mức 0 theo mặc định. Điều này chỉ bao gồm các bài kiểm tra cơ bản nhất. Bạn nên để codebase của bạn vượt qua từng cấp độ riêng lẻ trước khi chuyển sang cấp độ tiếp theo. Các dự án trưởng thành có thể gặp phải một loạt vấn đề khác nhau với mỗi cấp độ mới.

Để thay đổi cấp độ PHPStan sử dụng, bạn có thể sử dụng

vendor/bin/phpstan analyse src
1 tham số dòng lệnh:

vendor/bin/phpstan analyse src
2

Ngoài các điều khiển tích hợp, tiện ích mở rộng PHPStan có sẵn để thêm nhiều chức năng hơn nữa. Bạn cũng có thể viết các quy tắc của riêng bạn. Điều này hữu ích khi bạn không dùng chức năng mà các nhà phát triển không nên sử dụng trong mã mới nữa. Chúng tôi sẽ đề cập đến việc tạo các quy tắc tùy chỉnh trong một bài viết trong tương lai.

Định cấu hình PHPStan

Ngoài những thử nghiệm ban đầu, việc sử dụng giao diện dòng lệnh của PHPStan có thể nhanh chóng trở nên mệt mỏi. Tốt nhất là thêm tệp cấu hình vào dự án của bạn để sau đó có thể được gán cho quyền kiểm soát nguồn cho tất cả các nhà phát triển của bạn sử dụng.

PHPStan sử dụng định dạng tệp cấu hình Neon, có cú pháp rất giống với YAML. làm một

vendor/bin/phpstan analyse src
3 tệp trong thư mục gốc của dự án của bạn. Tệp này sẽ được tải tự động khi PHPStan bắt đầu, vì vậy bây giờ bạn có thể sử dụng
vendor/bin/phpstan analyse src
4 lệnh mà không cần đối số thêm:

vendor/bin/phpstan analyse

Để ghi đè tệp cấu hình đang sử dụng, hãy nhập

vendor/bin/phpstan analyse src
5 cờ:

vendor/bin/phpstan analyse --configuration /phpstan-config.neon

Bây giờ bạn cần của bạn

vendor/bin/phpstan analyse src
3 tệp với một số nội dung. Một điểm khởi đầu tốt có thể trông như thế này:

parameters:
  level: 0
  paths:
    - src

Tệp cấu hình cơ bản này sẽ cung cấp đầu ra giống như lệnh gọi dòng lệnh được hiển thị trước đó. Bạn có thể thêm các thư mục bổ sung để quét dưới dạng các dòng mới trong

vendor/bin/phpstan analyse src
7 phần. Để loại trừ các tệp và thư mục, hãy thêm chúng vào
vendor/bin/phpstan analyse src
8 trang tính trong cùng một
vendor/bin/phpstan analyse src
9 phần.

Bỏ qua lỗi

Đôi khi, PHPStan có thể tiết lộ một vấn đề khó tránh khỏi. Nếu có vấn đề mà bạn không thể khắc phục ngay lập tức, bạn có thể muốn bỏ qua nó một cách rõ ràng để các bài kiểm tra vượt qua.

Điều này đặc biệt quan trọng nếu bạn muốn chuyển sang một cấp độ kiểm soát khác hoặc nếu bạn đang sử dụng PHPStan trong môi trường CI nơi mà một lần chạy không thành công sẽ ngừng triển khai bản dựng của bạn. Nhưng đừng xem nhẹ quá trình hành động này – bạn chỉ nên chọn bỏ qua một lỗi được báo cáo nếu bạn chắc chắn rằng làm như vậy là an toàn.

Sau khi đưa ra quyết định, hãy thêm một cái mới

vendor/bin/phpstan analyse
0 phần bên trong nó
vendor/bin/phpstan analyse src
9 của tệp cấu hình của bạn. Bạn phải xác định thông báo phù hợp dưới dạng regex và các đường dẫn để áp dụng loại trừ cho:

parameters:
  level: 0
  paths:
    - src
  ignoreErrors:
    - message: '/Return type string of method ExampleClass::example() is not covariant(.*).'
      path: src/ExampleClass.php

Bạn có thể chỉ định tùy chọn

vendor/bin/phpstan analyse src
7 như một loạt các đường dẫn, thay thế các đường dẫn đơn lẻ
vendor/bin/phpstan analyse
3 chìa khóa hiển thị ở trên.

Các quy tắc tùy chọn

Mức độ nghiêm trọng của PHPStan có thể được điều chỉnh bằng một loạt các biến cấu hình. Điều này cho phép bạn tinh chỉnh các kiểm tra được thực hiện bên ngoài hệ thống cấp được mô tả ở trên. Một số trong số này có khả năng gây tranh cãi hoặc có thể không phù hợp với tất cả các hướng dẫn kiểu riêng, vì vậy chúng bị tắt theo mặc định.

Một số cài đặt có thể đáng để kiểm tra bao gồm:

  • vendor/bin/phpstan analyse
    4 – Dấu hiệu sử dụng
    vendor/bin/phpstan analyse
    5 mà sẽ luôn đánh giá
    vendor/bin/phpstan analyse
    6.
  • vendor/bin/phpstan analyse
    7 – Cờ khi sử dụng một biểu thức
    vendor/bin/phpstan analyse
    8 hoặc là
    vendor/bin/phpstan analyse
    9 sẽ luôn đánh giá
    vendor/bin/phpstan analyse
    6.
  • vendor/bin/phpstan analyse --configuration /phpstan-config.neon
    1 – Đảm bảo rằng tên hàm được viết hoa với định nghĩa của chúng khi được gọi trên cơ sở mã.
  • vendor/bin/phpstan analyse --configuration /phpstan-config.neon
    2 – Nếu được đặt thành
    vendor/bin/phpstan analyse --configuration /phpstan-config.neon
    3 (cô ấy
    vendor/bin/phpstan analyse
    6 default), các biến được khai báo trong các câu lệnh lặp ban đầu (ví dụ:
    vendor/bin/phpstan analyse --configuration /phpstan-config.neon
    5 trong
    vendor/bin/phpstan analyse --configuration /phpstan-config.neon
    6) không thể được truy cập bên ngoài khối mã của vòng lặp, tránh khả năng lây nhiễm phạm vi mẹ.
  • vendor/bin/phpstan analyse --configuration /phpstan-config.neon
    7 - Thực thi kiểm tra kiểu đầy đủ cho các tham số và kiểu trả về trong các phương thức tĩnh khi bị ghi đè bởi một lớp con.

Chi tiết đầy đủ về các cài đặt tùy chọn này - và nhiều hơn nữa - có thể được tìm thấy trong tài liệu tham khảo cấu hình PHPStan.

Phần kết luận

Đó là phần cuối của phần giới thiệu về PHPStan. Nó giúp bạn cảm thấy tự tin vào cơ sở mã của mình và chỉ ra các vấn đề tiềm ẩn trước khi chúng trở thành vấn đề trong quá trình sản xuất.

PHPStan thiết lập nhanh đến mức thực sự không có lý do gì để không sử dụng nó, đặc biệt nếu bạn đang chạy một cơ sở mã hiện đại, được đánh máy cao. Tuy nhiên, đừng để bị lừa khi nghĩ rằng nó có thể thay thế kiểm tra thủ công. PHPStan tự hào có nhiều loại kiểm soát, nhưng nó không thể xác định các vấn đề logic và không hiểu các quy tắc kinh doanh của dự án của bạn. Nó chỉ là một nội dung khác trong hộp công cụ của bạn khi đánh giá tình trạng của cơ sở mã, ngoài các hướng dẫn đáng tin cậy như kiểm tra đơn vị và kiểm tra chức năng end-to-end.