PHP 7.3 Geliyor!

P

 php 7.3

PHP 7.3  yeni kullanışlı özellikleri, işlevsellikleri, güncellenen ve kaldırılan bazı özelliklerle birlikte çıkış yapmaya hazırlanıyor.. Bu sürüm tamamen web geliştiricileri için özenle geliştirilmiştir.. Mevcut Beta 3 sürümü 30 Ağustos’ta piyasaya sürüldü ve PHP 7.3 zaman çizelgesi ile birlikte mükemmel bir şekilde çıkış yapmaya hazırlanıyor.

php 7.3
 

PHP 7.3 ile PHP’deki yenilikler neler?

Bu gönderide aşağıdaki PHP 7.3 değişikliklerini ele alıyoruz:

  • Esnek Heredoc ve Nowdoc Sözdizimleri
  • İşlev Çağrısında Trailing Comma için gerekli izinler
  • JSON_THROW_ON_ERROR
  • list() Referans İlişkilendirmesi
  • is_countable İşlevi
  • array_key_first(), array_key_last()
  • Argon2 Şifreleme Geliştirmeleri

 

Esnek Heredoc ve Nowdoc Sözdizimleri

Bu, muhtemelen PHP 7.3 ile gelen en önemli geliştirmelerden biridir ve bunun biraz daha fazla dikkat çektiğini düşünüyoruz. Bu yüzden, PHP 7.3 heredoc / nowdoc değerine geçmeden önce, bu yararlı çekirdek özellik hakkında hızlı bir genel bakış sağlayacağız. Eğer nowdoc ve heredoc sözdizimlerini zaten kullanıyorsanız, PHP 7.3 güncellemesini yapmaktan çekinmeyin.

Heredoc ve nowdoc sözdizimlerine genel bakış
Heredoc sözdizimi, çift tırnak gibi ifadelerden kurtulmak zorunda kalmadan büyük miktarda metin eklemenin bir yolunu sunar. Heredoc <<< ile başlar  ve aynı marker ile bir noktalı virgül ile biter. İşte bir örnek:

print <<<EOT
Heredoc metni, çift tırnak işareti olmadan çift tırnaklı bir dizeye benzer şekilde davranır.
EOT;

 

Bir nowdoc, bazı istisnalar dışında heredoc gibi davranır:

  • Tanımlayıcı tek tırnak içine alınır (<<< ‘EOT’)
  • Nowdoc içinde ayrıştırma yapılmaz.

 

Here is an example of nowdoc:

print <<<'EOT'Nowdocs, heredocların çift tırnaklı dizeleri yerine kullanılan tek tırnaklı dizelerdir.
EOT;

Heredocs ve nowdocs, kapanış işaretleyicisinin kullanımını düzenleyen aynı kuralları paylaşıyor:

  • Kapanış işareti, satırın ilk sütununda başlamalıdır.
  • İşaretleyici, PHP’deki diğer etiketlerle aynı adlandırma kurallarını izlemelidir: yalnızca alfasayısal karakterler ve alt çizgi içermelidir ve basamaklı olmayan bir karakterle veya alt çizgi ile başlamalıdır.

 

Kapanış tanımlayıcısına sahip olan satırın noktalı virgül (;) haricinde başka karakter içermemesi önemlidir. Bu, özellikle tanımlayıcının girintili olmayabileceği ve noktalı virgülden önce veya sonra herhangi bir boşluk veya sekme bulunmayabileceği anlamına gelir. Kapanış tanımlayıcısından önceki ilk karakterin, yerel işletim sistemi tarafından tanımlanan bir yeni satır olması gerektiğini fark etmek de önemlidir. Bu, macOS dahil UNIX sistemlerinde bulunur. Kapanış sınırlayıcısı ayrıca bir yeni satır tarafından takip edilmelidir.

PHP 7.2 yanlış sözdizimi:

class foo {
    public $bar = <<<EOT
    bar
    EOT;
}
// 

PHP 7.2 doğru söz dizimi:

class foo {
    public $bar = <<<EOT
bar
EOT;
}

PHP 7.2 için kısaca hatırlayalım:

  • Kapanış belirteci girintili olmayabilir
  • Kapanış işaretli satır boşluk veya sekme gibi karakterler içeremez
  • Kapanış işaretçisinden önceki ilk karakter yeni satır olmalı
  • Kapanış işaretine yeni satır eklenmelidir
  • Heredoc ve nowdoc sözdizimlerinin oldukça kısıtlayıcı olduğu yeterince açıktır, ancak PHP 7.3 bunu aşağıdaki iyileştirmelerle biraz değiştirebilir.

 

1. Kapanış işaretleyicinin girintili olmasına ve  boşlukların bulunması.

PHP 7.3 ile kapanış işaretini girebiliriz ve aşağıdaki kodu güvenle yazabiliriz:

class foo {
    public $bar = <<<EOT
        bar
    EOT;
}

Kapanış işaretleyicisinin girintisi, gövdenin her bir hattından sıyrılacak olan boşluk (veya tırnak) miktarını ayarlar. Ancak dikkatli olun: Kapanış belirteci asla kod dizesinden fazla girilmemelidir.

Aşağıdaki kodlara bakın:

class foo {
    public $bar = <<<EOT
    bar
        EOT;
}

Yukarıdaki kod, aşağıdaki ayrıştırma hatasını verir:

 Invalid body indentation level (expecting an indentation at least ...) in %s on line %d

Kesişen sekmeler ve beyaz boşluklar, heredos / nowdoc gövdesini, kod dizesinin her satırından önce gereksiz yere boşluk bırakmadan aynı kod seviyesine girmemizi sağlar.

Girinti için her iki sekmeyi ve alanı kullanabiliriz, ancak bunları karıştırılmış halde kullanmamıza izin verilmez. Bu, kapatma işaretçisi ve kod dizesinin herhangi bir satırı için aynı girinti karakterlerini kullanmamız gerektiği anlamına gelir. Farklı girinti karakterleri durumunda, farklı bir ayrıştırma hatası türü (geçersiz girinti) yaşarız.

2. Kapanış İşaretleyicisinden Sondaki Yeni Satır Gereksinimini Kaldırma
Şu anda, yeni bir satır, heredoc / nowdoc’u sonlandırmak için işaretleyiciyi takip etmelidir. PHP 7.3 bunu değiştirerek  heredoc / nowdoc’u aynı satırda sonlandırmamıza izin verecektir. İşte RFC’den bir örnek:

PHP 7.2 geçerli sözdizimi:

$values = [<<<END
a
b
c
END
, 'd e f'];

PHP 7.3 geçerli sözdizimi:

$values = [<<<END
a
b
c
END, 'd e f'];

Her neyse, işaretçinizin adını seçerken dikkatli olun, çünkü “bazen”, heredoc / nowdoc’un kod diziminde kullandığınız bir kelimeyle eşleşirse bir hata bekleyebilirsiniz.

İşlev çağrılarındaki virgüller artık kullanılabilecek!

İşlevleri takip eden virgülleri (veya “final virgülleri”), elemanların, parametrelerin veya özelliklerin bir listesine eklenmiş virgüllerdir ve yeni değerlerin sık sık eklendiği bağlamlarda kullanışlı olurlar, çünkü eksik virgül nedeniyle oluşan hataları önlerler. PHP’de, takip eden virgüllere dizilerde izin verilir ve PHP 7.2’den itibaren gruplandırılmış ad alanlarına izin verilir.

PHP 7.3’ten itibaren, fonksiyon bildirimlerinde takip eden virgüllere izin verilecekti. Variadic fonksiyonlar, takip eden virgüllerin son derece yararlı olduğu bir bağlam örneği sunar:

foo(
    $bar,
    $baz,
);

Sprintf () ile biçimlendirilmiş bir dizgiyi döndürmek için veya bir diziyi birleştirirken, compact () ile bir dizi oluşturduğumuzda, sondaki bir virgülü kullanabiliriz:

$newArray = array_merge(
    $arrayOne,
    $arrayTwo,
    ['foo', 'bar'],
);

Ayrıca, sondaki virgül hata ayıklama için de yararlı olacaktır:

var_dump(
    $foo,
    $bar,
    $baz,
);

Ve unset () ve isset () ile güçlüdürler:

unset(
    $foo,
    $bar,
    $baz,
);

isset(
    $foo,
    $bar,
    $baz,
);

Ayrıca, fonksiyonel durumlarda da takip eden virgüllere izin verilir.

JSON_THROW_ON_ERROR

PHP 7.3 ile gelen en beğenilen işlevselliklerden biri, JSON hatalarını ele almak için yeni bir yol sağlar. Bu çekirdek bir özellik değildir, json_decode () ve json_encode () debug sistemini değiştirecek JSON uzantısına bir eklemedir.

Şu anda, json_decode (), null değerini döndürür, ancak null, geçerli bir sonuç da olabilir. Bu kafa karıştırıcı olabilir, çünkü;

Sadecesırasıyla, makine tarafından okunabilir ve insan tarafından okunabilir formlarda global hata durumunu döndüren json_last_error () veya json_last_error_msg () çağrılarak bir hata oluşup oluşmadığını bilmek mümkündür.

json_encode () hata durumunda FALSE değerini döndürür. Bu daha açık, çünkü belirli bir hata değeri var. Her iki fonksiyon da hata durumunda program yürütmeyi durdurmaz ve herhangi bir uyarı vermez.

Bununla birlikte, PHP 7.3 önerisi:

Bu RFC, json_decode () ve json_encode (), JSON_THROW_ON_ERROR için yeni bir seçenek flag değeri eklemeyi önerir. Bu flag geçtiğinde, bu işlevlerin debug tespit sistemi değiştirildi. Genel hata durumu işlem yapılmaksızın bırakılır.Aksi takdirde bunu ayarlayabilecek bir hata ortaya çıkarsa, bu işlevler json_last_error () ve json_last_error_msg () öğelerinin sırasıyla ne olursa olsun mesaj ve kod ile birlikte bir JsonException atar.

JSON hatası atmanın basit bir yolunu gösteren bir örnek:

try {
    json_decode("{", false, 512, JSON_THROW_ON_ERROR);
}
catch (\JsonException $exception) {
    echo $exception->getMessage(); // echoes "HATA!"
}

Not: json_decode () öğesine geçirilen geçersiz bir derinlik parametresi ile bir uyarı verir ve NULL değerini döndürür. Bu davranış JSON_THROW_ON_ERROR tarafından etkilenmeyecektir. Benzer şekilde, parametre ayrıştırma hataları JSON_THROW_ON_ERROR tarafından etkilenmez ve uyarı üretmeye devam eder.

 

PHP 7.3 tanıtım yazımızın 2. bölümü yakında yayınlanacaktır. Mutlu Bloglamalar!

Yorum Yap

Bir Cevap Yazın

Yazar ; hostazor

Facebook Sayfamız

Bizi Twitter’da takip et

%d blogcu bunu beğendi: