PHP 7.4 Kimdir?

Başlık biraz garip olabilir evet ama bugün PHP 7.4'ü tanıyacağız, bildiğiniz gibi PHP 7.4 için çalışmalar hala devam ediyor ve bu güne kadar 3 alpha, 3 de beta versiyon yayınlandı.


PHP 7.4 NE ZAMAN ÇIKACAK

Başlık biraz garip olabilir evet ama bugün PHP 7.4’ü tanıyacağız, bildiğiniz gibi PHP 7.4 için çalışmalar hala devam ediyor ve bu güne kadar 3 alpha, 3 de beta versiyon yayınlandı. 5 Eylül itibariyle RC versiyonlar da yayınlanacak. PHP 7.4 release tarihi için belirtilen gün 28 Kasım 2019. Bu tarihe kadar toplamda 6 adet RC versiyon planlanmış görünüyor. Zamanlamalarla alakalı detaylı bilgiye şuradan da ulaşabilirsiniz.

PHP 7.4 ile gelen yeni özellikler

  • Arrow functions
  • Preloading
  • Typed properties (in Classes)
  • Improved type variance
  • Spread operator in Arrays
  • Null assignment operator
  • FFI (for better extension development in PHP)
  • Formatted Numeric Values (Numeric Literal Separator)

Şimdi bu maddeleri kısa kısa inceleyelim

Arrow Functions

Closure ve Anonymous fonksiyonları PHP’de uzun zamandır kullanıyoruz. Bununla alakalı küçük bir örnek yazalım:

array_map(function (User $user) { 
    return $user->id; 
}, $users)

Bu şekilde tek satır olarak kullandığımız, sadece return işlemi yapan fonksiyonları artık Arrow Functions ile şu şekilde kullanabileceğiz:

array_map(fn (User $user) => $user->id, $users)

Arrow Functions ile ilgili bilmemizin faydası olacağını düşündüğüm bir kaç bilgiyi de sizinle paylaşayım:

  • Parent scope içerisinde bulunan değişkenlere use anahtar kelimesini kullanmadan direkt olarak Arrow Functions içerisinde erişebiliyoruz.
  • Arrow Functions sadece return işlemi içermeli ve tek bir satırda yazılmalıdır.

Typed Properties (in Classes)

Bu özellik ile artık sınıflar içerisinde tanımladığımız değişkenlere (class variables) tür tanımlaması yapabileceğiz. Şöyle ki:

class A
{
    public string $name;
    
    public ?Foo $foo;
}

Burada bazı özel hususlar mevcut. Örneğin; public olarak tanımlanmış bir sınıf değişkenine, herhangi bir yerden erişmemiz mümkün. Ama eğer bu değişkene bir tür tanımlaması yaptıysak ve bu değişken için bir initialize (değer tanımlaması diyebiliriz) yapmadıysak; değişkene erişmeye çalışırken şuna benzer bir hata alacağız:

Improved Type Variance

PHP 7 ile birlikte yazdığımız fonksiyonlar dönüş tipi belirtebileceğimiz bir özellik geldi. Güzel de oldu. Bu özellik ile belli veri tipleri için dönüş tipleri (return types) belirtebiliyorduk.

PHP 7.4 ile bu olay biraz daha geliştirilmiş ve artık covariant dönüş tipi de kullanabileceğiz. Örneklendirecek olursak:

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}

Buna ek olarak covariant tiplerin kullanımı sadece dönüş tipleri için değil, fonksiyon parametre tipleri için de kullanılabilecek. Şöyle ki:

class A
{
    public function contraVariantArguments(ChildType $type)
    { /* … */ }
}

class B extends A
{
    public function contraVariantArguments(ParentType $type)
    { /* … */ }
}

Bu geliştirme ile alakalı RFC bağlantısını buraya bırakıyorum.

Null Assignment Operator

Biliyorsunuz PHP 7 ile birlikte hayatımıza null operatörü girmişti. Şu şekilde bir kullanım yapabiliyorduk:

$data['date'] = $data['date'] ?? new DateTime();

Artık bu gibi işlemleri yeni eklenecek Null Assignment Operator ile şu şekilde çok daha kısa yapabileceğiz:

$data[‘date’] ??= new DateTime();

Nasıl? Bence yerinde bir geliştirme olmuş.

Array Spread Operator

Spread operatörünü (…) fonksiyon parametrelerinde kullanabiliyorduk. Artık bu operatör direkt olarak diziler içerisinde de kullanıma uygun hale getirilmiş. Güzel de olmuş. Şöyle bir örnek görelim:

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

Burada dikkat etmemiz gereken bir husus var o da; bu işlemi sadece numeric index key’lere sahip diziler ile yapabiliyor olmamız. Bu da aklınızda bulunsun. Belki ilerleyen zamanlarda tüm key’ler için işlem yapabileceğimiz geliştirmeler yapılabilir. Bu yeniliğin RFC bağlantısını da şöyle bırakayım.

Numeric Literal Separator

PHP 7.4 ile birlikte alt tire (underscore) karakteri ile birlikte uzun numeric ifadeleri daha görsel yazabilmek mümkün olacak. Şöyle bir örnek verelim:

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;

Bu geliştirmenin RFC bağlantısını da şöyle bırakıyorum.

Foreign Function Interface (FFI)

Bu özellik ile bazı core-level özellikleri kullanmak istediğimizde kendi kodumuz üzerinden C kodunu çağırma imkanı bulabileceğiz. Özetle; PHP ile bir PHP extension yazabilecek ve bunu kullanabileceğiz. Bunun için yine de C bilgisi gerekecek çünkü bu tarz bir geliştirmenin hala karışık ve zorlu tarafları var. Sonuçta core-level’da işlem yapacağız ve bu beraberinde C bilgisini gerektirecek. Bu özellik için de bir RFC bağlantısı mevcut. İsterseniz detaylı olarak bir inceleme yapabilirsiniz.

Bu konu çok fazla araştırma veya deneme fırsatı bulduğum bir konu değil maalesef, elimden geldiğince temel bilgi vermeye çalışıyorum. Bu nedenle, bu konu hakkında detaylı bilgisi olan veya kaynak paylaşabilecek kişiler bana ulaşabilirse, yazının bu kısmını güncelleyip daha detaylı ve doğru bilgi verebiliriz diye düşünüyorum.

Preloading

Şimdi bu olayı kısaca ele alalım: PHP ile bir web uygulaması yazdığımızı düşünelim. Bunun için herhangi bir frameworkü kullanıyoruz veya kendimizce bir yapı oluşturmuş ve bunu kullanıyoruz. Server’a gelecek her request için uygulamanızda bulunan gerekli dosyaların sürekli olarak yüklenmesi gerekecek. Bu dosyaları sizin uygulamanızın core dosyaları olarak düşünebilirsiniz. Yani uygulama çalışırken kesinlikle yüklenmesi gereken dosyalar. Çekirdek sınıflar, fonksiyonlar, config dosyaları vs… Tüm bu dosyalar her gelen request için bir daha, bir daha yüklenecek. İşte burada devreye Preloading giriyor!

Yazımı bir sözle bitirmek istiyorum

Before software can be reusable it first has to be usable.

(Yazılımın yeniden kullanılabilmesi için önce kullanılabilir olması gerekir.)

Ralph Johnson


Beğendin mi? Arkadaşlarınla paylaş!

1
1 puan
Mehmet COŞKUN

Software Engineer

0 Yorum

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir