- 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)
Arrow Functions
Closure ve Anonymous fonksiyonları PHP’de uzun zamandır kullanıyoruz. Bununla alakalı küçük bir örnek yazalım:
PHP Kod:
array_map(function (User $user) {
return $user->id;
}, $users)
PHP Kod:
array_map(fn (User $user) => $user->id, $users)
- Parent scope içerisinde bulunan değişkenlere [b]use[/b] anahtar kelimesini kullanmadan direkt olarak Arrow Functions içerisinde erişebiliyoruz.
- Arrow Functions [b]sadece return işlemi[/b] 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:
PHP Kod:
class A
{
public string $name;
public ?Foo $foo;
}
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:
PHP Kod:
class ParentType {}
class ChildType extends ParentType {}
class A
{
public function covariantReturnTypes(): ParentType
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* … */ }
}
PHP Kod:
class A
{
public function contraVariantArguments(ChildType $type)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* … */ }
}
Null Assignment Operator
Biliyorsunuz PHP 7 ile birlikte hayatımıza null operatörü girmişti. Şu şekilde bir kullanım yapabiliyorduk:
PHP Kod:
$data['date'] = $data['date'] ?? new DateTime();
Kod:
$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:
Kod:
$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]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:
Kod:
$unformattedNumber = 107925284.88;
$formattedNumber = 107_925_284.88;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 [b]RFC bağlantısı[/b] 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!
)

