♻️ WordPress 6.4 ve Plugin Dizini İçin PHP Uyumluluğunu En Üst Düzeye Çıkarmak
WordPress 6.4 "Shirley" yayınlandı. PHP 8.1 veya 8.2 ile çalıştırılması tavsiye edilir; ancak desteklenen minimum PHP sürümü hâlâ 7.0'dır.
Bu nedenle, WordPress eklentilerimizin (mümkün olduğunca) PHP 7.0'a kadar aşağıdaki sürümleri desteklemesi ve PHP 8.1 ile 8.2 ile uyumlu olması gerekmektedir.
Bunu yapmanın en mantıklı yolu, eklentilerimizi PHP 7.0 kullanarak kodlarken şunlardan kaçınmaktır:
- PHP 7.x'te kullanımdan kaldırılmış özellikler kullanmak, zira bunlar PHP 8.x'te kaldırılmış olacaktır
- PHP 8.x'te kullanımdan kaldırılmış özellikler kullanmak, zira bunlar uyarılara yol açacaktır
Eklenti kodunun uyumlu olduğundan emin olmak için, farklı PHP sürümlerini çalıştıran çeşitli ortamlarda kapsamlı testler yapmamız gerekmektedir.
PHP 7.x'te kodlama yapmanın açık bir dezavantajı vardır: Eklenti kodu PHP 8.x ile uyumlu olmak zorundadır, ancak birleşim türleri (union types), match ifadesi, nullsafe operatörü ve diğerleri gibi özelliklerinden hiçbirini kullanamaz.
Daha iyi bir alternatif mevcuttur.
PHP Kodunu 8.x'ten 7.x'e Düşürmek
PHP 7 ile kodlayıp PHP 8 ile çalıştığından emin olmak yerine tersini yapabiliriz: Eklentiyi PHP 8 ile kodlayıp PHP 7'ye düşürmek (downgrade etmek).
Bu, PHP kod yeniden düzenlemesini otomatikleştiren bir araç olan Rector sayesinde mümkündür.
Rector, PHP 8.1'den PHP 7.2'ye kod düşürme kuralları sağlamaktadır. Bu, söz konusu modern özellikleri WordPress eklentilerimizde kullanabileceğimiz anlamına gelir; zira bunlar PHP 7.2 koduna düşürülebilmektedir.
Örneğin, DowngradeMatchToSwitchRector kuralı, match operatörünü switch operatörüne dönüştürür:
class SomeClass
{
public function run()
{
- $message = match ($statusCode) {
- 200, 300 => null,
- 400 => 'not found',
- default => 'unknown status code',
- };
+ switch ($statusCode) {
+ case 200:
+ case 300:
+ $message = null;
+ break;
+ case 400:
+ $message = 'not found';
+ break;
+ default:
+ $message = 'unknown status code';
+ break;
+ }
}
}Kuralların yalnızca PHP 7.2'ye kadar düşürme için geçerli olduğunu, PHP 7.1 ve 7.0'a kadar değil, dikkat edin. Ancak bu büyük bir sorun değildir; bu iki PHP sürümü birleştiğinde WordPress sitelerinin yalnızca %3'ünü oluşturmaktadır.
Kod düşürme daha iyi bir yaklaşımdır, çünkü:
- PHP 8.1 ile kodlama yaparak, kodumuzun PHP 8.1 ve 8.2 ile uyumlu olacağından kesinlikle emin oluruz.
- Düşürme kurallarının mevcut olduğu PHP özelliklerini kullandığımız sürece, kod PHP 7.2, 7.3 ve 7.4'te de çalışacaktır.
- PHP 8.x'in birleşim türleri (union types), match ifadesi, nullsafe operatörü ve daha pek çok özelliğinden yararlanabiliriz.
Tüm PHP 8.x özelliklerinin mevcut olmadığını unutmayın. Örneğin, numaralandırmaları (enumerations) düşürmek için henüz bir kural bulunmadığından, bunları kullanamayız.
Test açısından herhangi bir fark yoktur: Güvenli tarafta kalmak için eklentiyi, farklı PHP sürümlerini çalıştıran çeşitli ortamlarda kapsamlı biçimde test etmemiz gerekmektedir.
Kod Nasıl Düşürülür
Gato GraphQL PHP 8.1 ile geliştirilmekte ve production ortamı için PHP 7.2'ye düşürülmektedir.
Kodun düşürülmesi, test edilmesi ve ardından eklentinin production için yayınlanması işlemlerinin tamamı GitHub Actions iş akışları aracılığıyla otomatikleştirilmiştir:
downgrade_php_tests.yml: Kodu düşürür ve PHP 7.2 kullanarak analiz edergenerate_plugins.yml: PHP 7.2'ye düşürerek yayın için eklentiyi oluştururintegration_tests.yml: Yeni oluşturulan eklentiyi farklı PHP sürümleri çalıştıran bir dizi InstaWP örneğine yükler ve entegrasyon testleri çalıştırır
Daha fazla bilgi edinmek için bu konuda birkaç makale yazdım:
- 🦸🏿♂️ Gato GraphQL artık PHP 8.0'dan 7.1'e dönüştürülüyor
- Transpiling PHP code from 8.0 to 7.x via Rector
- Coding in PHP 7.4 and deploying to 7.1 via Rector and GitHub Actions
Umarım faydalı bulursunuz 🙏