PHPStan 1. 6. 0 đã được phát triển trong khoảng một tháng qua mang đến một số lượng tính năng và cải tiến mới đáng ngạc nhiên. Hãy đi sâu vào chúng Show
Các loại trả về có điều kiệnPhần lớn tính năng này được phát triển bởi Richard van Velzen Kể từ lần phát hành đầu tiên, PHPStan đã đưa ra một cách để mô tả các hàm trả về các kiểu khác nhau dựa trên các đối số được truyền trong lệnh gọi. Cái gọi là tiện ích mở rộng loại trả về động thực sự linh hoạt - bạn có thể giải quyết loại dựa trên bất kỳ logic nào bạn có thể triển khai. Nhưng nó có cái giá của nó - có một lộ trình học tập về các khái niệm cốt lõi của việc viết các phần mở rộng PHPStan Trong PHPStan 0. 12 đến thuốc generic. Chúng bao gồm một phần các kịch bản với cú pháp PHPDoc đặc biệt trong đó cần có các phần mở rộng kiểu trả về động với logic tùy chỉnh trước đây Hôm nay PHPStan tiến thêm một bước trong khả năng truy cập các tính năng nâng cao này. Bạn không còn phải là một chuyên gia để tận dụng chúng. Thật thú vị, ai đó thậm chí có thể gọi đây là những giải pháp “không mã” 🤣 Các kiểu trả về có điều kiện cho phép bạn viết logic “if-else” trong thẻ PHPDoc Các loại trả về có điều kiện có thể được kết hợp với thuốc generic Loại mẫu chung cũng có thể được sử dụng bên trong điều kiện Các điều kiện phức tạp hơn có thể được thể hiện bằng cách lồng các loại điều kiện mặt nạ số nguyênTính năng này được phát triển bởi Richard van Velzen Một mẫu phổ biến để định cấu hình hành vi của hàm là chấp nhận một giá trị số nguyên bao gồm các cờ khác nhau được nối với toán tử
Để mẫu này hoạt động, mỗi giá trị này phải là một giá trị lũy thừa hai riêng biệt (1, 2, 4, 8,…) Bây giờ bạn có thể sử dụng cái này trong PHPStan Ngoài ra còn có biến thể Tiêu thụ bộ nhớ thấp hơnPHPStan đã từng là một con thú thực sự đói ăn. Đến mức bị giết một cách dã man bởi những người chạy CI vì nó tiêu tốn không chỉ toàn bộ bộ nhớ lên tới Bây giờ nó là một con thú ít đói hơn. Làm thế nào tôi làm cho nó xảy ra? . Bạn có thể tiêu thụ bộ nhớ khi đạt được những điều hữu ích, nhưng để tiêu thụ ít bộ nhớ hơn về tổng thể, bộ nhớ phải được giải phóng sau đó để có thể sử dụng lại cho các dữ liệu khác nhau cần thiết khi phân tích tệp tiếp theo trong dòng Để gỡ lỗi rò rỉ bộ nhớ, tôi sử dụng tiện ích mở rộng Tôi nhanh chóng nhận ra rằng phần lớn bộ nhớ bị chiếm bởi các nút AST. PHP giải phóng bộ nhớ bị chiếm bởi một đối tượng khi không còn tham chiếu đến nó nữa. Nó không hoạt động trong trường hợp các nút AST vì chúng liên tục chỉ vào nhau Chắc chắn rồi, cũng có bộ thu gom rác thu thập các chu kỳ như thế này. Nhưng PHPStan đã có nó vì nó cải thiện hiệu suất theo thời gian. Khi có nhiều chu kỳ, các ứng dụng chưa được gọi là Bởi vì việc loại bỏ các thuộc tính nút 0/ 1 là một sự phá vỡ khả năng tương thích ngược đối với các quy tắc tùy chỉnh đọc chúng, tôi chỉ làm điều đó khi cấu hình Bleeding Edge được bật. Tôi đã viết một bài viết về cách làm cho các quy tắc này hoạt động trở lại ngay cả khi không có các tham chiếu tiêu tốn bộ nhớ đóMột thay đổi thú vị trong tất cả những điều này là việc loại bỏ cuộc gọi Trong thử nghiệm của tôi, PHPStan hiện tiêu thụ bộ nhớ ít hơn khoảng 50–70 % khi bật Bleeding Edge Bạn có thể kích hoạt Bleeding Edge bằng cách đưa cái này vào 3 của bạn
Phản xạ hoàn toàn tĩnhVào tháng 6 năm 2020, tôi đã phát hành PHPStan 0. 12. 26 với phản xạ tĩnh một phần mang lại nhiều lợi ích cho người dùng Nó chỉ là một phần vì phiên bản đầy đủ tiêu tốn nhiều tài nguyên hơn. Là một phần của việc tối ưu hóa mức tiêu thụ bộ nhớ, tôi đã viết lại các phần của BetterReflection để nó không giữ các nút AST khi không cần chúng nữa. Tôi đã mô tả quá trình ở đây Trong thử nghiệm, nó trông thực sự hứa hẹn, sự khác biệt về hiệu suất giữa thời gian chạy và phản xạ tĩnh là không đáng kể. Vì vậy, tôi quyết định đã đến lúc thực hiện bước tiếp theo. bắt đầu triển khai công cụ phản chiếu tĩnh 100%. Nó đã giải quyết các trường hợp cạnh khác nhau như thế này hoặc thế này Nó hiện là một phần của Bleting Edge và kế hoạch của tôi là kích hoạt nó cho mọi người trong PHPStan 1. x ngay cả trước phiên bản chính tiếp theo. Đây là đợt triển khai theo từng giai đoạn để tôi có thể thu thập và xử lý phản hồi từ những người dùng đầu tiên trước khi triển khai cho những người khác Làm cho các toán tử kết hợp includes: - vendor/phpstan/phpstan/conf/bleedingEdge.neon4 và null (includes: - vendor/phpstan/phpstan/conf/bleedingEdge.neon5) nhất quán đối với các thuộc tính không xác địnhTính năng này được phát triển bởi Yohta Kimura Trong nhiều năm, PHPStan đã phải chịu đựng sự mâu thuẫn rõ ràng này Mặc dù hai dòng trong câu hỏi tương đương về mặt chức năng, nhưng hành vi của PHPStan không phản ánh điều đó. Mục đích là để PHPStan bảo vệ người dùng khỏi lỗi chính tả trong tên thuộc tính, nhưng nó đã được chứng minh là gây khó chịu hơn là hữu ích đối với hầu hết Hành vi mặc định mới là Nhưng nếu bạn muốn hành vi chặt chẽ hơn và cả hai dòng đều báo lỗi (cuối cùng là nhất quán), bạn có thể bật nó bằng tùy chọn này trong 3 của mình________số 8_______Điều này cũng được kích hoạt trong 7 1. 2. 0 khi kết hợp với Bleeding EdgeHỗ trợ đầy đủ PHP 8. 1Trước PHPStan 1. x đã hỗ trợ nhiều thay đổi và tính năng mới được tạo trong PHP 8. 1. Điều cuối cùng mà PHPStan không biết là các chữ ký đã thay đổi của các hàm PHP tích hợp. Đáng chú ý nhất là 8 đã đạt được một tham số tùy chọn mới vàKể từ PHP 8. 0 PHPStan sử dụng kho lưu trữ sơ khai cây nhà lá vườn được trích xuất trực tiếp từ php-src - Tôi có thể tin rằng chúng là chính xác, nhưng tôi phải tìm cách đại diện cho PHP 8. 1 thay đổi mà không tăng gấp đôi kích thước kho lưu trữ. Tôi đã quyết định sử dụng các thuộc tính 9 và 0 tùy chỉnh để đánh dấu các chữ ký đã thay đổiBạn có thích PHPStan và sử dụng nó hàng ngày không? . Tôi thực sự đánh giá cao nó Làm cách nào để đặt kiểu trả về của hàm trong PHP?Khai báo kiểu trả về PHP
. Để khai báo kiểu trả về của hàm, hãy thêm dấu hai chấm (. ) và nhập ngay trước dấu ngoặc nhọn ( { ) khi khai báo hàm .
Làm cách nào để trả về kiểu dữ liệu trong PHP?Hàm gettype() trả về loại biến.
Làm cách nào để trả về giá trị từ hàm PHP?Các giá trị được trả về bằng cách sử dụng câu lệnh trả về tùy chọn . Bất kỳ loại nào cũng có thể được trả về, bao gồm cả mảng và đối tượng. Điều này làm cho chức năng kết thúc thực thi ngay lập tức và chuyển quyền điều khiển trở lại dòng mà nó được gọi.
Làm cách nào để lặp lại giá trị trả về của hàm trong PHP?Hàm echo() xuất ra một hoặc nhiều chuỗi . Ghi chú. Hàm echo() không thực sự là một hàm, vì vậy bạn không bắt buộc phải sử dụng dấu ngoặc đơn với nó. Tuy nhiên, nếu bạn muốn truyền nhiều hơn một tham số cho echo(), việc sử dụng dấu ngoặc đơn sẽ tạo ra lỗi phân tích cú pháp. |