1 0
Read Time:4 Minute, 9 Second

Merhaba, bakalım bu sürümde PHP 8 ile bize sunulan yenilikleri inceleyelim.

Öncelikle şunu belirtmekte fayda var, PHP 7 de çalışan iş mantığı (business logic) PHP 8 ile birlikte farklı çalışabilir. PHP 8 kullanmadan önce lütfen gerekli yedeklemeleri alın.

JIT (JUST IN TIME)

Öncelikle bu sürümde gelen en önemli değişikliklerden birisine değinmemiz gerekecek JIT aslında tam zamanında demektir. JIT, verimliliği arttırmak için kullanılan bir stratejidir.

PHP 8 ile birlikte artık PHP çalışma esnasında (Run Time) yorumlanan bir dil olmaktan çıkıyor ve makine diline derlenerek yorumlanmaya başlıyor. Ayrıca bu özellik kapatılıp açılabilecek bir özellik olacak. Yani istediğimiz zaman bu özelliği düzenleyebileceğiz. Fakat bu özelliği kapattığımız durumda çok fazla bir performans iyileştirmesi olmayacaktır.

Peki neden böyle bir şey yapıyor ?

Run time yorumlamaya bağlı kalındığı sürece daha fazla performans geliştirilmesi yapılamayacak şeklinde bir açıklama gelmiş.

Referans: https://wiki.php.net/rfc/jit

Yeni operator (nullsafe operator)

İlla bir yerlerde bir değişkenin null (boş veya yok) olup olmadığını kontrol etmişizdir. Bu özellikte tam olarak onunla ilgili. Artık geliştiriciler bir değişkenin null olup olmadığını kontrol etmek için ? operatörünü kullanacak. PHP 8 dökümanlarından yola çıkarak örneğimizi inceleyelim.

//PHP 7 kullanımı 
$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
 
//PHP 8 ile birlikte
$country = $session?->user?->getAddress()?->country;

Referans: https://wiki.php.net/rfc/nullsafe_operator

Static return type

PHP 7 ile birlikte Function Return Type (Fonksiyon değer döndürme tipi) özelliği getirildi. Bu özelliğin getirilmesiyle birlikte bir çok veri türünde (Self, int,string vb.) return yapabiliyorduk fakat static türünde değer döndüremiyorduk.

PHP 8 ile birlikte static türünde değer döndürebiliyoruz..

class Test {
    public function createFromWhatever($whatever): static {
        return new static($whatever);
    }
}

Referans: https://wiki.php.net/rfc/static_return_type

NAMED ARGUMENTS

Sevdiğim özelliklerden birisidir kendisi. Bu özellikle birlikte fonksiyon ve methodlara göndereceğimiz parametreleri sırayla yazmak zorunda değiliz. Parametrelerin adını belirterek sırayla kullanabiliyoruz.


function_name(paramName: $value);    // (1) as proposed
function_name(paramName => $value);  // (2)
function_name(paramName = $value);   // (3)
function_name(paramName=$value);     // (3) formatting variation
function_name($paramName: $value);   // (4)
function_name($paramName => $value); // (5)

Kullanım örneklerine geçelim..

<?php

// PHP 7
round(1.49, 0, PHP_ROUND_HALF_UP);

// PHP 8 (2. SIRADAKI PARAMETREYI GONDERMEDIK)
round(val: 1.49, mode: PHP_ROUND_HALF_UP);

// PHP 7
in_array("FIFA", ["CALL OF DUTY","FIFA","PUBG"]);

// PHP 8
in_array(
  needle: "FIFA", 
  haystack: ["CALL OF DUTY","FIFA","PUBG"]
);

Üstteki kod satırı internetten alınmıştır.

Referans : https://wiki.php.net/rfc/static_return_type

Throw expression

PHP 8 yeni güncellemesi ile Throwu farklı alanlarda kullanabiliyoruz.

// This was previously not possible since arrow functions only accept a single expression while throw was a statement.
$callable = fn() => throw new Exception();
 
// $value is non-nullable.
$value = $nullableValue ?? throw new InvalidArgumentException();
 
// $value is truthy.
$value = $falsableValue ?: throw new InvalidArgumentException();

Referans: https://wiki.php.net/rfc/throw_expression

Non-capturing catches

PHP 7 ve önceki destekleyen sürümlerinde try-cach kullandığımız yerlerde mecburiyetten bir exception değişkeni tanımlardık. Kullansakta kullanmasakta o değişken kullanılmak zorundaydı. Artık değil..

//PHP 7 ve önceki sürümler için kullanım
try {
    foo();
} catch (SomeException $ex) {
    die($ex->getMessage());
}

//PHP 8 için kullanım
try {
    changeImportantData();
} catch (PermissionException) { // The intention is clear: exception details are irrelevant
    echo "You don't have permission to do this";
}

Referans: https://wiki.php.net/rfc/non-capturing_catches

Concatenation Precedence

PHP’de hepimizin bildiği gibi birleştirme operatörü nokta karakteri. String birleştirme işlemlerinde operatör kullanmamız gerekiyor fakat bazı durumlarda yanlış yorumlayabiliyordu.

Birlikte bir birleştirme işlemi yapalım.

echo "sum: " . $a + $b;

Bu işlem PHP 7’de şu şekilde algılanabilir (bu şekilde algılayacaktır.)

echo ("sum: " . $a) + $b;

PHP 8 in yeni güncellemesi ile bu şekilde algılanacaktır.

echo "sum :" . ($a + $b);

Referans: https://wiki.php.net/rfc/concatenation_precedence

New str_contains() function

PHP 8 ile gelen strpos methodunun daha gelişmiş ve kullanımı basitleştirilmiş bi hali.

Bildiğiniz üzere PHP 7 tarafında string içersinde aradığımız başka bir stringin olup olmadığını strpos ile incelerdik fakat kullanımı birazcık zordu.

<?php
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

// The !== operator can also be used.  Using != would not work as expected
// because the position of 'a' is 0. The statement (0 != false) evaluates 
// to false.
if ($pos !== false) {
     echo "The string '$findme' was found in the string '$mystring'";
         echo " and exists at position $pos";
} else {
     echo "The string '$findme' was not found in the string '$mystring'";
}
?>

Üstteki açıklama satırlarına ve yapılanlara bakılırsak kontrol etmek için != çalışmayacak !== işlemi çalışacaktır. Bunun sebebi tamamen denklik kontrolunden gelmektedir.

Eski defterleri çok fazla açmaya gerek yok haydi yeni fonksiyonumuzun kulanımına geçelim

if (str_contains('abcd xx','x')) {
  // somethings
}

Referans: https://wiki.php.net/rfc/str_contains

Arkadaşlar yazımızın sonuna geldik. PHP 8 ile birlikte bir çok iyileştirme, yeni özellik bizleri bekliyor fakat ben size en gerekli gördüklerimi sundum. Umarım hepimiz için faydalı bir içerik olmuştur.

Yazımızı ara ara güncelleyeceğim fakat o zamana kadar PHP 8 in size sunduğu yeniliklerden haberdar olmak için https://wiki.php.net/rfc#php_80 inceleyebilirsiniz.

Yeni PHP sürümünde görüşmek üzere..

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Bir cevap yazın

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