PHP 8 YENİLİKLER

PHP 8.0, PHP dili için önemli bir güncellemedir.
Optimizasyonlar ve yeni özellikler: Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir.

Adlandırılmış Değişkenler
PHP 7 htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
Adlandırılmış Değişkenler
PHP 8 htmlspecialchars($string, double_encode: false);
  • Opsiyonel parametreleri atlayabiliyor ve yalnızca zorunlu olanları belirtebiliyorsunuz.
  • Parametrelerin sırası önemli değil ve kendi kendilerini dokümante ediyorlar.
Attributes
PHP 7 class PostsController { /** * @Route("/api/posts/{id}", methods={"GET"}) */ public function get($id) { /* ... */ } }
Attributes
PHP 8 class PostsController { #[Route("/api/posts/{id}", methods: ["GET"])] public function get($id) { /* ... */ } }

PHPDoc yorum satırları yerine PHP sözdizimi ile yapılandırılmış metadata kullanılabiliyor.

Kurucularda Özellik Tanımı
PHP 7 class Point { public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0 ) { $this->x = $x; $this->y = $y; $this->z = $z; } }
Kurucularda Özellik Tanımı
PHP 8 class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0, ) {} }

Sınıfların özelliklerini tanımlamak için daha az kodlama yapılabiliyor.

Union types
PHP 7 class Number { /** @var int|float */ private $number; /** * @param float|int $number */ public function __construct($number) { $this->number = $number; } } new Number('NaN'); // Ok
Union types
PHP 8 class Number { public function __construct( private int|float $number ) {} } new Number('NaN'); // TypeError

Değişken türlerinin kombinasyonu için PHPDoc açıklamaları yerine çalışma zamanında doğrulanan birleşim türleri (union types) tanımlamaları kullanılabiliyor.

Match İfadesi
PHP 7 switch (8.0) { case '8.0': $result = "Oh no!"; break; case 8.0: $result = "This is what I expected"; break; } echo $result; //> Oh no!
Match İfadesi
PHP 8 echo match (8.0) { '8.0' => "Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected

Yeni match ifadesi switch’e çok benzer ve aşağıdaki özelliklere sahiptir:

  • Match bir ifadedir, sonucu bir değişkende saklanabilir veya döndürülebilir.
  • Match’in karşılıkları tek satır ifadeleri destekler ve break; kullanılması gerekmez.
  • Match katı (strict) tip karşılaştırma yapar.
Nullsafe Operatorü
PHP 7 $country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } }
Nullsafe Operatorü
PHP 8 $country = $session?->user?->getAddress()?->country;

Null koşulları için kontroller yazmak yerine yeni Nullsafe operatörüyle çağrı zinciri oluşturabilirsiniz. Oluşturduğunuz zincirdeki herhangi bir parça hatalı değerlendirilirse tüm zincirin işlevi durur ve null olarak değerlendirilir.

Daha Akıllı String ve Sayı Karşılaştırmaları
PHP 7 0 == 'foobar' // true
Daha Akıllı String ve Sayı Karşılaştırmaları
PHP 8 0 == 'foobar' // false

Sayısal string karşılaştırılırken PHP 8 sayısal olarak karşılaştırır. Aksi halde sayı bir string’e çevrilir ve string olarak karşılaştırılır.

Dahili İşlevler için Tutarlı Hata Türleri
PHP 7 strlen([]); // Warning: strlen() expects parameter 1 to be string, array given array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
Dahili İşlevler için Tutarlı Hata Türleri
PHP 8 strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

Artık dahili işlevlere gönderilen parametreler doğrulanamazsa Error exception fırlatıyorlar.

Tip sistemi ve hata işlemede iyileştirmeler

  • Aritmetik/bitsel operatörler için daha katı tip denetimi RFC
  • Soyut özellikli metodlar için doğrulama RFC
  • Sihirli metodlar için doğru işaretlemeler RFC
  • Yeniden sınıflandırılan motor hataları RFC
  • Uyumsuz metod işaretleri için fatal error RFC
  • @ operatörü artık önemli hataları susturmuyor
  • Private methodlarda kalıtımlar RFC
  • Mixed tipi RFC
  • Static return tipi RFC
  • Dahili işlevler için tip açıklamaları E-posta konusu
  • Eklentiler için özkaynak türleri(resources) yerine opak nesneler: Curl, Gd, Sockets, OpenSSL, XMLWriter ve XML.

Diğer PHP sözdizimi düzenlemeleri ve iyileştirmeleri

  • Parametre ve closure listelerinin sonunda virgül kullanılabilmesi RFC RFC
  • Değişken atamasına gerek olmayan hataların yakalanabilmesi RFC
  • Değişken sözdizimlerinde iyileştirmeler RFC
  • İsim alanındaki tanımları tek bir belirteç olarak değerlendirme RFC
  • Throw deyimi artık bir ifade (expression) RFC
  • Nesnelerde ::class kullanılabilmesi RFC

Yeni Sınıflar, Arayüzler ve Fonksiyonlar

  • Weak Map sınıfı
  • Stringable arayüzü
  • str_contains(), str_starts_with(), str_ends_with() fonksiyonları
  • fdiv()
  • get_debug_type()
  • get_resource_id()
  • token_get_all() nesne implementasyonu
  • New DOM Traversal and Manipulation APIs

Özetle: Daha iyi performans, daha iyi sözdizimi, geliştirilmiş tip desteği.

PHP 8’i indirmek için downloads sayfasını ziyaret edebilirsiniz. Windows için derlenmiş sürümüne PHP for Windows sayfasından ulaşabilirsiniz. Değişiklikler için ChangeLog‘a göz atabilirsiniz.

Başlat
Whatsapp mesajlaşma
Whatsapp mesajlaşma başlatmak için
aşağıdaki butona tıklayınız!