Văn bản được tóm tắt bởi AI durumis
- Chúng tôi đã giới thiệu công cụ di chuyển Rector để giải quyết các vấn đề về cú pháp không được hỗ trợ và các vấn đề về phiên bản sau khi nâng cấp lên phiên bản PHP mới.
- Rector có thể kiểm tra và sửa đổi cú pháp của mã PHP từ phiên bản 5.3 đến 8.2 để phù hợp với phiên bản mong muốn.
- Để sử dụng Rector, cần cài đặt Composer, viết tệp cấu hình rector.php, chỉ định các quy tắc và thư mục không muốn áp dụng, và sau đó chạy nó.
Các trang web sử dụng GNUboard5 là một CMS của Hàn Quốc đã có một vài bài than phiền về ngữ pháp và phiên bản bị ngừng hỗ trợ sau khi nâng cấp phiên bản php. Vì thế họ đã tìm kiếm
Reddit và biết đến công cụ rector giúp di chuyển dữ liệu nên xin giới thiệu cách sử dụng công cụ này.
Sau khi PHP 7.0 được phát hành vào năm 2015, đã có các công cụ di chuyển dữ liệu php như php cs-fixer, rector, v.v.
rector có vẻ dễ sử dụng hơn
rector (được phát âm là "rét-tơ") kiểm tra cú pháp và sửa đổi mã từ PHP 5.3 ~ 8.2 thành phiên bản mong muốn.
Một điều đáng tiếc là rector là công cụ phân tích tĩnh nên không thể phát hiện lỗi xảy ra trong thời gian chạy.
Bạn cần phải cài đặt trình quản lý gói Composer của PHP để sử dụng Rector.
1. Cài đặt Composer.
2. Cài đặt rector trong thư mục dự án hiện tại.
```php composer require rector/rector --dev
3. Tạo tệp cấu hình rector.php.
Cấu hình rector.php
Để dễ hiểu, chúng ta sẽ thiết lập một tình huống.
Giả sử mã nguồn đích là mã php5.3 và phiên bản mục tiêu nâng cấp là php 7.4.
Phiên bản Rector là 1.0.3.
```php <?php
use Rector\Config\RectorConfig; use Rector\Php54\Rector\Array_\LongArrayToShortArrayRector; use Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector;
return RectorConfig::configure() ->withPhpSets(php74: true) ->withParallel(1200, 8, 8) ->withPaths([ DIR . '/src', // Đường dẫn đến mã nguồn ]) ->withSkip([ Rector\Php73\Rector\ConstFetch\SensitiveConstantNameRector::class, Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::class, Rector\CodeQuality\Rector\If\SimplifyIfElseToTernaryRector::class, Rector\Php53\Rector\Ternary\TernaryToElvisRector::class, Rector\Php80\Rector\Class\ClassPropertyAssignToConstructorPromotionRector::class, Rector\Php80\Rector\FunctionLike\MixedTypeRector::class, Rector\CodeQuality\Rector\If\SimplifyIfNullableReturnRector::class, Rector\Php80\Rector\Switch\ChangeSwitchToMatchRector::class, Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector::class, Rector\Php71\Rector\ClassConst\PublicConstantVisibilityRector::class, ]);
RectorConfig::config() thiết lập đường dẫn đến thư mục mã nguồn và phiên bản PHP.
Hàm withPhpSets thiết lập các hàm PHP mà bạn muốn nâng cấp.
Nếu phiên bản php hiện tại mà bạn chạy rector là php 8.0
```php ->withPhpSets(php74: true)
Bạn có thể thiết lập phpversion: true như thế này.
Tuy nhiên, nếu phiên bản PHP mà bạn đang chạy thấp hơn php 7.4
Bạn nên cài đặt true khi bạn muốn sử dụng phiên bản mong muốn vì bạn không thể sử dụng ngữ pháp tham số có tên trong các hàm.
Vì rector hỗ trợ php 8.3 nên để chỉ định php 74, bạn hãy làm như sau:
```php ->withPhpSets( false, // php 8.3 false, // php 8.2 false, // php 8.1 false, // php 8.0 false, // php 8.1 true // php 7.4 )
->withPaths([
__
DIR__
, // Đây là danh mục có chứa rector.php.
])
```php
->withSkip([
Rector\Php73\Rector\ConstFetch\SensitiveConstantNameRector::class,
Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::class,
Rector\CodeQuality\Rector\If\SimplifyIfElseToTernaryRector::class,
Rector\Php53\Rector\Ternary\TernaryToElvisRector::class,
Rector\Php80\Rector\Class\ClassPropertyAssignToConstructorPromotionRector::class,
'/data/*',
])
Chỉ định quy tắc và thư mục mà bạn không muốn áp dụng.
Thư mục là '/tên thư mục/*'
Tệp là 'tên tệp'
Quy tắc là "SensitiveConstantNameRector" còn
rector không thể tìm thấy điều này khi có undefined index trong mảng PHP mà chỉ nhận dạng là hằng số nên sẽ thay đổi sai. Vì thế, hãy thêm nó vào trong quy tắc ngoại lệ.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Loại bỏ các quy tắc này vì chúng là phong cách mã.
Thực hiện
Có hai cách.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Lệnh này chỉ xuất ra các mã cần thay đổi trong bảng điều khiển.
Vì bạn càng có nhiều mã nguồn thì càng cần