Yêu cầu phiên bản Symfony 5 PHP

Hãy theo dõi mục tiêu của chúng tôi. Bây giờ chúng tôi đã nâng cấp lên Symfony 5. 4, ngay sau khi chúng tôi loại bỏ tất cả những thứ không dùng nữa, chúng tôi có thể nâng cấp lên Symfony 6 một cách an toàn. Nhưng Symfony 6 yêu cầu PHP 8 và tôi đã xây dựng dự án này trong PHP 7. Vì vậy, bước tiếp theo là cập nhật mã của chúng tôi để tương thích với PHP 8. Trong thực tế, điều đó có nghĩa là cập nhật các phần mã của chúng tôi để sử dụng một số tính năng mới thú vị của PHP 8. Woo. Và đây là một điểm khác mà Hiệu trưởng có thể giúp chúng tôi

Bắt đầu bằng cách mở rector.php và xóa ba dòng nâng cấp Symfony. Thay thế chúng bằng LevelSetList::UP_TO_PHP_80. Giống như với Symfony, bạn có thể nâng cấp cụ thể lên PHP 7. 3 hoặc 7. 4, nhưng họ có những câu lệnh UP_TO_[...] tuyệt vời này sẽ nâng cấp mã của chúng tôi trên tất cả các phiên bản PHP cho đến PHP 8. 0

dòng 1 - 12trả về hàm tĩnh (ContainerConfigurator $containerConfigurator). khoảng trống {. dòng 14 - 22$containerConfigurator->import(LevelSetList. LÊN_TO_PHP_80);. dòng 24 - 29};

Và. đó là tất cả những gì chúng ta cần

Tại thiết bị đầu cuối của bạn, tôi đã cam kết tất cả các thay đổi của mình, ngoại trừ thay đổi chúng tôi vừa thực hiện. Vì vậy, bây giờ chúng ta có thể chạy

vendor/bin/rector process src

Mát mẻ. Hãy xem qua một số thay đổi này. Nếu bạn muốn đi sâu hơn, hãy tìm kiếm một getrector. bài đăng trên blog của org, hướng dẫn bạn cách thực hiện những gì chúng tôi vừa thực hiện. mà còn cung cấp cho bạn thêm thông tin về những gì Hiệu trưởng đã làm và tại sao

Ví dụ: một trong những thay đổi mà nó thực hiện là thay thế các câu lệnh switch() bằng một hàm PHP 8 match() mới. Điều này giải thích rằng. và nhiều thay đổi khác. Ồ, và phần lớn những thay đổi này không bắt buộc. bạn không cần phải thực hiện chúng để nâng cấp lên PHP 8. Họ thật tuyệt

Thay đổi quan trọng nhất, tình cờ lại là thay đổi phổ biến nhất, được gọi là "Thuộc tính được quảng cáo". Đây là một trong những tính năng yêu thích của tôi trong PHP 8 và bạn có thể xem nó ngay tại đây. Trong PHP 8, bạn có thể thêm từ khóa private, public hoặc protected ngay trước một đối số trong hàm tạo. và điều đó sẽ tạo ra thuộc tính đó và đặt nó thành giá trị này. Vì vậy, bạn không còn cần phải thêm thuộc tính theo cách thủ công hoặc đặt thuộc tính bên dưới. Chỉ cần thêm private và. xong

dòng 1 - 8class MarkdownExtension mở rộng AbstractExtension{public function __construct(private MarkdownHelper $markdownHelper){}. dòng 14 - 28}

Phần lớn các thay đổi trong tệp này chính xác là như vậy. đây là một ví dụ khác trong rector.php0. Hầu hết các thay đổi khác là nhỏ. Nó đã thay đổi một số chức năng gọi lại để sử dụng cú pháp rector.php1 ngắn mới, thực ra là từ PHP 7. 4

dòng 1 - Trình trợ giúp Markdown lớp 8{. dòng 11 - 14phân tích hàm công khai (chuỗi $source). chuỗi{. dòng 17 - 24return $this->cache->get('markdown_'. md5($source), fn() => $this->markdownParser->transformMarkdown($source));}}

Bạn cũng có thể xem ở dưới đây một ví dụ về tái cấu trúc các câu lệnh switch() để sử dụng hàm match() mới

dòng 1 - lớp 11 Câu hỏi Người bình chọn mở rộng Người bình chọn{. dòng 14 - 24hàm được bảo vệ voteOnAttribute(string $attribute, $subject, TokenInterface $token). bool{. dòng 27 - 40 kết quả trả về ($attribute) {'EDIT' => $user === $subject->getOwner(),default => false,};}}

Tất cả điều này là tùy chọn, nhưng thật tuyệt khi mã của chúng tôi đã được cập nhật để sử dụng một số tính năng mới. Nếu tôi cuộn xuống thêm một chút nữa, bạn sẽ thấy thêm những thứ này

Ồ, và bên trong các thực thể của chúng ta, lưu ý rằng, trong một số trường hợp, nó đã thêm các loại thuộc tính. Đối với rector.php4, thuộc tính này được khởi tạo thành một mảng. Hiệu trưởng nhận thấy rằng. vì vậy nó đã thêm loại rector.php5

dòng 1 - 15 lớp Người dùng triển khai Giao diện người dùng{. dòng 18 - 29mảng riêng $roles = [];. dòng 34 - 226}

Trong các trường hợp khác, chẳng hạn như rector.php6, nó thấy rằng chúng tôi có PHPDoc phía trên nó, vì vậy nó cũng đã thêm loại ở đó

dòng 1 - 15 lớp Người dùng triển khai Giao diện người dùng{. dòng 18 - 34 private string $password;. dòng 40 - 226}

Mặc dù, đây là một chút nghi vấn. rector.php6 cũng có thể là null

Mở rector.php8 và cuộn xuống rector.php6. Hiệu trưởng đã đưa ra loại LevelSetList::UP_TO_PHP_800 này. nhưng điều đó là sai. Nếu bạn nhìn vào hàm tạo ở dưới đây, chúng tôi không khởi tạo giá trị rector.php6 cho bất kỳ giá trị nào. có nghĩa là nó sẽ bắt đầu LevelSetList::UP_TO_PHP_802. Vì vậy, loại chính xác cho điều này là nullable LevelSetList::UP_TO_PHP_803. Sở dĩ Hiệu trưởng làm sai như vậy là do. ổn. bởi vì tôi đã có một lỗi trong tài liệu của tôi. Đây phải là LevelSetList::UP_TO_PHP_804

dòng 1 - 15 lớp Người dùng triển khai Giao diện người dùng{. dòng 18 - 34 private ?string $password = null;. dòng 40 - 226}

Một trong những thay đổi lớn nhất mà tôi đã thực hiện trong mã của mình trong khoảng một năm qua kể từ PHP 7. 3 đã được phát hành, đã thêm các loại thuộc tính như thế này, cả trong các lớp thực thể và cả các lớp dịch vụ của tôi. Nếu điều này hơi khó hiểu, đừng lo lắng. Chúng ta sẽ nói nhiều hơn về các loại thuộc tính bên trong thực thể trong vài phút nữa. Bạn có thể thấy rằng Hiệu trưởng đã thêm một số, nhưng rất nhiều tài sản của chúng tôi vẫn còn thiếu chúng

Được rồi, mã của chúng ta bây giờ đã sẵn sàng cho PHP 8. vâng. Vì vậy, hãy nâng cấp các phụ thuộc của chúng tôi cho PHP 8. Trong LevelSetList::UP_TO_PHP_805, bên dưới khóa LevelSetList::UP_TO_PHP_806, nó hiện cho biết dự án của tôi hoạt động với PHP 7. 4 hoặc 8. Tôi sẽ thay đổi điều đó thành chỉ nói LevelSetList::UP_TO_PHP_807, đây là phiên bản tối thiểu cho Symfony 6. 0

{. dòng 2 - 5"yêu cầu". {"php". "^8. 0. 2",. dòng 8 - 45},. dòng 47 - 109}

Nhân tiện, Symfony 6. 1 yêu cầu PHP 8. 1. Vì vậy, nếu bạn sẽ sớm nâng cấp lên phiên bản đó, bạn có thể chuyển thẳng lên 8. 1

Có một thứ khác tôi có ở đây gần cuối. Hãy xem nào. chúng ta đi đây. Vào ngày LevelSetList::UP_TO_PHP_808, LevelSetList::UP_TO_PHP_809, tôi đã đặt PHP thành 7. 4. Điều đó đảm bảo rằng nếu ai đó đang sử dụng PHP 8, Trình soạn thảo vẫn sẽ đảm bảo rằng nó tải xuống các phụ thuộc tương thích với PHP 7. 4. Thay đổi cái này thành UP_TO_[...]0

{. dòng 2 - 56"config". {. dòng 58 - 61"nền tảng". {"php". "số 8. 0. 2"},. dòng 65 - 68},. dòng 70 - 109}

Ngọt. Và bây giờ, vì chúng tôi đang sử dụng PHP 8 trong dự án của mình, nên rất có thể một số phụ thuộc sẽ đủ điều kiện để cập nhật. Chạy

Và. vâng. có một số. Có vẻ như tất cả UP_TO_[...]1, UP_TO_[...]2 và UP_TO_[...]3 đều đã được nâng cấp. Nhiều khả năng tất cả các phiên bản mới này đều yêu cầu PHP 8. Trước đây chúng tôi không thể nâng cấp, nhưng bây giờ chúng tôi có thể. Nếu chúng tôi đi qua trang của chúng tôi và tải lại. mọi thứ vẫn hoạt động

Một điều khác trong LevelSetList::UP_TO_PHP_805 là bản thân Symfony Flex. Flex sử dụng sơ đồ phiên bản của riêng mình và phiên bản mới nhất là 2. 1. Tại thời điểm này, Flex phiên bản 2 và Flex phiên bản 1 giống hệt nhau. ngoại trừ Flex 2 yêu cầu PHP 8. Vì chúng tôi đang sử dụng nó, hãy nâng cấp. Thay đổi phiên bản thành UP_TO_[...]5. sau đó quay trở lại thiết bị đầu cuối của bạn và chạy

một lần nữa. Đẹp

Được rồi, đội. Dự án của chúng tôi hiện đang sử dụng PHP 8. Để ăn mừng, hãy tái cấu trúc từ việc sử dụng chú thích thành thuộc tính gốc của PHP 8. OOOoo. Tôi yêu sự thay đổi này. một phần vì Hiệu trưởng làm cho nó cực kỳ dễ dàng

Symfony có hoạt động với PHP 8 không?

PHP đang bước vào một kỷ nguyên vàng mới với việc phát hành PHP 8 và Symfony sẽ hoàn toàn tương thích kể từ ngày đầu tiên .

Sự khác biệt giữa Symfony 4 và 5 là gì?

Nhanh hơn và gọn gàng hơn . phiên bản x. Nâng cấp ngay bây giờ để làm cho các ứng dụng của bạn bay.

Làm cách nào để kiểm tra các yêu cầu của Symfony?

Kiểm tra Yêu cầu đối với Máy chủ Web . php trong thư mục web/của dự án của bạn. Mở tệp đó bằng trình duyệt của bạn để kiểm tra các yêu cầu . Khi bạn đã khắc phục tất cả các sự cố được báo cáo, hãy xóa web/config.

Symfony có dựa trên PHP không?

Symfony là khung ứng dụng web PHP mã nguồn mở và miễn phí và một bộ thư viện thành phần PHP có thể tái sử dụng.