Text summarized by durumis AI
- PHP sürümü yükseltildikten sonra, kullanımdan kaldırılan sözdizimi ve sürüm sorunları için Rector adlı bir geçiş aracı tanıtıldı.
- Rector, PHP 5.3~8.2 kodlarını istenen sürüme göre söz dizimini kontrol edip düzeltir.
- Rector kullanmak için Composer kurulumu, rector.php yapılandırma dosyası oluşturma, uygulamak istemediğiniz kurallar ve dizinleri belirtme, çalıştırma gibi adımlar gereklidir.
PHP 7.0 sürümünün 2015'te piyasaya sürülmesiyle php sürüm yükseltme aracı olan php cs-fixer, rector gibi araçlar ortaya çıktı.
rector kullanımının diğer araçlara göre daha kolay olduğunu düşünüyorum.
rector (okunuşu: rektör) PHP 5.3 ~ 8.2 arası kodları istediğiniz sürüme göre söz dizimi kontrolü yaparak düzeltir.
Tek üzücü yanı rector'un statik bir analiz aracı olması nedeniyle çalışma zamanında oluşan hataları algılayamaması.
Rector'ü kullanabilmek için php paket yöneticisi olan Composer kurulu olmalıdır.
1. Composer'ı kurun.
2. Mevcut proje klasörüne rector'ı kurun.
```php composer require rector/rector --dev
3. rector.php adlı yapılandırma dosyasını oluşturun.
rector.php ayarları
Anlayabilmeniz için bir durum belirleyeceğim.
Hedef kaynak kod PHP5.3 kodudur ve yükseltme hedefi ise PHP 7.4'tür.
Rector sürümü 1.0.3'tür.
```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', // kaynak kod yolu ]) ->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() kaynak kod klasörü, PHP sürüm ayarı yapar.
withPhpSets fonksiyonu yükseltmek istediğiniz PHP fonksiyonunu ayarlar.
Eğer rector'ü şu anda kullanan php sürümü php 8.0 ise
```php ->withPhpSets(php74: true)
php sürümü : true şeklinde yapabilirsiniz.
Ancak eğer çalıştırdığınız PHP sürümü php 7.4 ve altındaysa
Fonksiyonlarda adlandırılmış parametre söz dizimini kullanamayacağından istediğiniz sürüm çıktığı zaman true yapmalısınız.
rector php 8.3'ü desteklediğinden php 74'ü belirtmek için aşağıdaki gibidir.
```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__ , // rector.php dosyasının bulunduğu dizindir.
])
```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/*',
])
Uygulamak istemediğiniz kuralları ve klasörleri belirtir.
Klasörler '/klasöradı/*'
Dosyalar 'dosyaadı' biçimindedir.
Kurallarda ise "SensitiveConstantNameRector" ekledim çünkü
rector eğer PHP array'inde undefined index olursa bunu bulamayıp sadece constant olarak algılayıp gereksiz yere değiştirmeye çalışıyor. O nedenle istisna kuralına ekledim.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Bu kurallar kod stili olduğu için istisna ekledim.
Çalıştırma
İki türlü yapılabilir.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Bu komut sadece değiştirilmesi gereken kodları konsola bastırır.
Kaynak kodunuz çok ise çok ram kullanacağı için --memory-limit=2G diyerek ram miktarını arttırmalısınız.
```bash vendor/bin/rector --memory-limit=2G
Bu komut ise kaynak dosyayı direkt olarak değiştirir.
İstemediğiniz seçenekler ya