PHP 8'in Getirdiği Yenilikler

Kadir Doğuş Seçkin
3 min readMar 26, 2024

--

PHP 8, PHP dilinin en son büyük sürümüdür ve birçok önemli özellik ve iyileştirme getirmiştir. Bu makalede, PHP 8 ile gelen yeniliklerden ve bu özelliklerin PHP ile uygulama geliştirme üzerindeki etkilerinden bahsedeceğiz. Özellikle, performans iyileştirmeleri, yeni dil özellikleri ve güvenlik konularındaki gelişmeler üzerinde duracağız.

Union Types

Bu özellik, bir değişkenin, parametrenin veya dönüş değerinin birden fazla türde olabileceğini belirtmenize olanak tanır.

function getNumberOrString(int|string $value): int|string {
return $value;
}

Bu fonksiyon parametre olarak int ve string tipini kabul edebilir aynı zamanda bu iki tipten birini dönebilmektedir.

Named Arguments

Named arguments özelliği, fonksiyon çağrıları sırasında parametre adlarının belirtilmesine olanak tanır. Bu sayede, parametrelerin sırası önemli olmaksızın doğrudan istenen parametreye değer atanabilir.

function setProduct(string $name, bool $hasColor = false, bool $isActive = false)
{
}

setProduct("Product", false, true); // PHP 8 Öncesi

setProduct(isActive : true, name : "Product"); // PHP 8 Sonrası

Bu özellik sayesinde hem kod okunabilirliği artar. Hem de ihtiyacımız olmayan default tanımlanmış parametreleri tekrar fonksiyonu çağırırken yazmak zorunda kalmayız.

Match Expression

Match expression yapı olarak switch-case yapısına çok benzer. Farkı ise direkt bir değer döner ve değerleri kıyaslarken === operatörünün yaptığı gibi hem değer hem tip olarak kıyaslar.

$status = 200;
$statusResponse = match ($status) {
200, 201 => "OK",
404 => "Not Found",
default => "Unknown status",
};

echo $statusResponse;

Bu örnekte status 200 veya 201 olduğunda “OK” mesajını $status değişkenin içine atacaktır. Eğer $status içindeki 200 değeri integer değilde string bir şekilde tanımlanmış olsaydı, tip kontrolüde yapıldığı için “Unknown status” sonucunu alırdık.

Constructor property promotion

Bir sınıfı oluştururken constructor içinden aldığı parametreler ile bu sınıf içindeki özellikleri doldurduğumuz bir kodumuz varsa bunu daha kısa bir şekilde yazmamıza olanak sağlar. PHP 8 öncesi ve sonrasından kod örnekleriyle bunu gösterelim.

PHP 8 Öncesi

class User {
private string $name;
private string $phone;

public function __construct(string $name, string $phone) {
$this->name = $name;
$this->phone = $phone;
}
}

PHP 8 Sonrası

class User {
public function __construct(
private string $name,
private string $phone
) {}
}

PHP 8 sonrasında daha az kod ile aynı işi yapabildik.

Nullsafe operator

Bu özellik sayesinde null kontrollerini zincirleme bir şekilde yapıp hatayı önleyebiliriz. Ayrıca birden fazla if satırıyla yapabileceğimiz işi tek satır kod ile halledebiliriz. PHP’nin kendi dökümanındaki örnekte bu güzel bir şekilde gösterilmiş.

PHP 8 Öncesi

$country =  null;

if ($session !== null) {
$user = $session->user;

if ($user !== null) {
$address = $user->getAddress();

if ($address !== null) {
$country = $address->country;
}
}
}

PHP 8 Sonrası

$country = $session?->user?->getAddress()?->country;

Saner string to number comparisons

PHP 8 sonrasında string ve int kıyaslamaları daha tutarlı sonuçlar vermektedir.

PHP 8 Öncesi

var_dump("100" == 100);   // bool(true)
var_dump("100a" == 100); // bool(true)

PHP 8 Sonrası

var_dump("100" == 100);   // bool(true)
var_dump("100a" == 100); // bool(false)

Bu değişiklik PHP’nin tip güvenliği için yaptığı geliştirmelerden biridir.

String functions

PHP 8 ile birlikte sıkça ihtiyaç duyduğumuz bazı string operasyonları için yeni fonksiyonlar getirildi.

  • str_contains() : String bir değeri başka bir string değerin içinde arar içeriyorsa true aksi halde false döner.
  • str_starts_with() : Bir string değerin verilen değerle başlayıp başlamadığını kontrol eder. Başlıyor ise true aksi halde false döner.
  • str_ends_with() : Bir string değerin verilen değerle bitip bitmediği kontrol eder. Bitiyor ise true aksi halde false döner.
$sentence = "Hello world.";

var_dump(str_contains($sentence, 'world')); // bool(true)
var_dump(str_starts_with($sentence, 'h')); // bool(false)
var_dump(str_ends_with($sentence, '.')); // bool(true)

Just-In-Time compilation ( JIT)

JIT , çalışma zamanında programın kodunu optimize eden bir teknolojidir. PHP 8 ile birlikte gelen bu özellik, PHP’nin performansını önemli ölçüde artırma potansiyeline sahiptir.

PHP her istek üzerine yorumlanır ve çalıştırılır. Bu, her seferinde baştan sona işlenmesi gerektiği anlamına gelir, bu da zaman ve kaynak tüketimi açısından verimsiz olabilir.

JIT sıkça kullanılan kod parçalarını dinamik olarak tanımlayarak ve bu kodları doğrudan makine diline çevirerek optimize eder. Çevrilen kod daha sonra tekrar tekrar kullanılabilir böylece hız artar ve kaynak tüketimi azalır.

Daha detaylı bilgiyi aşağıda bıraktığım linkte bulabilirsiniz . Okuduğunuz için teşekkür ederim.

https://www.php.net/releases/8.0/en.php

--

--