Bản tin PHP tháng <?= 9 ?>

Xin chào các bạn, tiếp tục là PHP Newsletter, phát tin từ đài Sun* News. Bản tin tổng hợp về cộng đồng PHP trong thời gian gần đây, xin mời các bạn đón đọc!

Hello again, World!

Trong bài trước chúng ta có nhắc đến PHP 8, và giới thiệu sơ qua về một số tính năng mới của PHP 8. Bạn có thắc mắc ai là người phát triển các chức năng mới đó và quy trình để thực hiện việc đó như thế nào không?

Trong số lần này, hãy cùng tìm hiểu về khái niệm RFC, cũng như cập nhật các tin tức mới nhất về các hoạt động của cộng đồng PHP trong thời gian gần đây.

RFC

RFC hay Request for Comments là một process ban đầu được dùng trong lĩnh vực mạng máy tính, để chỉ những văn bản chi tiết về các nghiên cứu mới hay các thay đổi áp dụng cho công nghệ mạng, Internet do một cá nhân hay tổ chức đề xuất. Mục đích để thông báo và kêu gọi cộng đồng nhận xét, đánh giá và phê bình, trước khi được phê duyệt bởi tổ chức IETF.

Một số RFC có lẽ bạn đã biết đến đó là:

- rfc7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content: mô tả về HTTP protocol, request methods, request header fields, response status codes, response header fields…

- rfc822 - thường được nhắc đến trong tính năng validate email của PHP FILTER_VALIDATE_EMAIL. Tuy nhiên rfc822 đã lỗ thời và được thay thế bởi rfc2822 và sau đó là  rfc5322 - Internet Message Format

- rfc3339 - Date and Time on the Internet: Timestamps

Và còn nhiều RFC khác…

Với một ngôn ngữ mã nguồn mở như PHP, bạn có bao giờ thắc mắc là ai là người quyết định các thay đổi liên quan đến ngôn ngữ, ai là người quyết định merge pull request vào php-src, những tính năng mới của PHP 7, PHP 8 từ đâu mà ra? Cần phải có một quy trình để kiểm soát các vấn đề này và RFC cũng được áp dụng vào PHP.

Để có một tính năng mới áp dụng vào PHP thì một cá nhân hay nhóm sẽ soạn thảo và gửi RFC trên trang https://wiki.php.net/rfc/ sau đó thông báo cho cộng đồng và được mang ra thảo luận. Cuối cùng là giai đoạn bỏ phiếu xem có chấp nhận RFC không. Những người bỏ phiếu thuộc PHP core contributors, bao gồm các cá nhân đã nhiều đóng góp cho PHP như Rasmus Lerdorf (tác giả ban đầu của PHP), Zeev Suraski (người phát triển Zend Engine), Nikita Popov (người tạo ra thư viện PHP-Parser và có nhiều đóng góp cho PHP 7),... có khoảng tầm 40 - 50 người thường tham gia vote. 

Trong quá trình thảo luận hoặc voting, chủ nhân của RFC sẽ tiến hành implement và tạo pull request để củng cố những quan điểm đã trình bày trong RFC.

Trạng thái của một PHP RFC sẽ đi từ Draft => Under Discussion => Accepted hoặc Declined. Sau khi được accept, status sẽ chuyển sang Implemented nếu đã tính năng được merge vào PHP core.

Về quy trình cụ thể để tạo một PHP RFC, các bạn có thể tham khảo thêm tại bài viết này.

Danh sách các RFC hướng đến PHP 8 được liệt kê tại đây

Nhiều ngôn ngữ khác cũng áp dụng tư tưởng của RFC, ví dụ đối với JavaScript là quy trình TC39 proposals (ECMAScript proposals), Rust RFC, Vue RFC, React RFC,...

Releases

Cùng tìm hiểu qua một số công cụ, thư viện được ra mắt hoặc release phiên bản mới trong thời gian gần đây.

  • Laravel 8: Laravel 8 release với một số thay đổi về model và factory, cùng với sự ra đời của 2 sản phẩm mới: Jetstream và Fortify
  • Laravel Jetstream: Laravel app với các chức năng được implement sẵn như login, registration, email verification, two-factor authentication, session management, API, và tùy chọn quản lý team. Jetstream được thiết kế phát triển sử dụng Tailwind CSS, Livewire và InertiaJS. Các bạn có thể coi nó như một ứng dụng base, từ đó có thể phát triển hay custom các chức năng theo nhu cầu cá nhân.
  • Laravel Fortify: Authentication backend for Laravel bao gồm cookie-based authentication, two-factor authentication, email verification. Một cách dễ hình dung thì Laravel Jetstream là frontend cho các trang login, registration, email verification, two-factor authentication còn Laravel Fortify là backend. Xem notes.
  • GitHub CLI 1.0: Tool quản lý Github từ terminal, release bởi Github.
  • Vue 3.0 "One Piece": Điểm đáng chú ý nhất trong lần major release này của VueJS là Composition API cùng với sự cải thiện đáng kể về performance.
  • Parser Combinators: có khả năng ứng dụng khi viết parser (chẳng hạn custom query syntax, parse smileys code từ message để render emoji,...) hay extract thông tin từ text theo cách dễ đọc, dễ hiểu hơn regex. Một số thư viện như: Parsica, PHP PPC, PHPLRT
  • Emoji catalog: Danh sách emoji được định nghĩa trong class constants
  • PHP Generator: Generate PHP class, function

Videos đáng chú ý

Dưới đây là một số videos đáng chú ý trong các sự kiện, hội nghị thường niên về PHP trong năm 2020

Bài viết đáng chú ý

  • Một số lỗi bảo mật thường gặp trong Laravel
    Đa số các lỗi bảo mật thường là kết quả của việc thiếu nhận biết và không cẩn thận hay không đọc kỹ tài liệu. Đôi khi, developer không nhận ra một đoạn code thông thường có thể dẫn đến lỗ hổng bảo mật như thế nào. 
    Trong ebook này, CyberPanda Team sẽ chia sẻ một số lỗi bảo mật thường gặp nhất, cũng như best practices để phòng tránh, trong quá trình nhiều năm họ giúp đỡ các startup secure các ứng dụng Laravel.
    Tham khảo thêm: https://blog.laravel.com/unique-rule-sql-injection-warning
  • Những cải tiến về PHP code coverage trong 2020
    Với bản release Xdebug 1.2 và PHPUnit 9.3 thì đã có một số cải tiến trong việc generate code coverage report. Bài viết đề cập đến code coverage của PHPUnit và các hạn chế hiện tại của nó. Tiếp theo là các khái niệm branch coverage, path coverage và cách áp dụng trong PHPUnit.
  • Modernizing a Legacy PHP Application
    Maintain các ứng dụng PHP cũ kỹ, điều mà chắc hẳn ai cũng ngại. Nhưng hãy thử tham khảo xem người khác họ làm như thế nào. Bài viết giới thiệu một số anti-patterns cần phải fix khi maintain các project PHP cũ.
  • How you shouldn’t use Repository pattern
    Áp dụng Repository pattern vào một ActiveRecord framework như Laravel, bạn đang làm như thế nào? Hãy đọc thử ý kiến phản bác về việc không nên dùng repository pattern trong Laravel.
  • Symfony 5: The Fast Track
    Một quyển sách miễn phí được viết bởi Symfony founder. Nội dung sách là về việc phát triển một ứng dụng web từ ban đầu cho đến production sử dụng Symfony 5, từ setup môi trường, database, cho đến xây dựng giao diện, xây dựng trang admin, API, xây dựng ứng dụng Web SPA... Cho dù bạn chưa bao giờ làm việc với Symfony framework, nhưng nó cũng rất quý giá để mở rộng kiến thức về PHP ecosystems, cũng như kinh nghiệm từ một lập trình viên kỳ cựu.
  • How to run over 30k tests in under 5 minutes
    Chạy 30k tests trong vòng dưới 5 phút? Có thể không khi test bao gồm database integration tests? Hãy xem họ đã làm như thế nào.

Chủ đề khác:

Có thể bạn đã biết

Đáp án kỳ trước 

1. Đoạn code sau đây có hợp lệ không, vì sao?

=> Xem tại đây

Dòng thứ 3 ở đoạn code trên foreach (...) try nhìn hơi lạ nhưng nó hoàn toàn hợp lệ. Thực ra nó cũng giống foreach (...) echo $abc, đó là kiểu viết inline control structure. Mặc dù hợp lệ nhưng thường các code convention standard đều không cho phép :D Chạy PHPCS sẽ có lỗi: Inline control structures are not allowed.

2. Đoạn code sau có vấn đề gì không? Output sẽ như thế nào?

=> Xem tại đây

Vì đoạn code trên sử dụng swith bên trong foreach, mà continue thì có tác dụng với cả switch (đối với switch thì continue có tác dụng giống như break) và foreach. Nên ở đây PHP sẽ throw warning: Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

Điều này cũng đã được note trong PHP Document => https://www.php.net/manual/en/control-structures.continue.php

Bản tin kỳ này sẽ không có câu hỏi nữa, nhưng các bạn có thể chạy thử đoạn code sau và lưu ý khi dùng reference trong vòng lặp

TIPS: PHP support array destructuring, bạn có thể sử dụng để code gọn hơn và tránh phải define biến tạm.

Nếu viết theo kiểu thông thường:

#PHP