PHP 7.1 İle Gelen Özellikler

Bu yazıyı yazmak için kullandığım kaynağı Thomas Punt adında bir abimiz yazmış. Ben de özetimsi bir şekilde Türkçeleştirip sizlerle paylaşmak istedim.

Bu yazıyı vaktim oldukça parça parça yazmaya çalışacağım.Gerekli gördüğüm ve sık kullanılan tüm yeni özellikleri yazı ekledim. Yazı tekrar güncellenmeyecektir.

3 Mart 2017 tarihinde versiyon 1 olarak paylaştım. Yeni gelen versiyonlar yazının altına değil üstüne eklenecektir.

7 Mart 2017

Sınıf Sabitlerinin Gizliliği

PHP 7.1’den önce sınıfların sabitlerine protected, private gibi görünürlük (visibility) özellikleri veremiyorduk. Oluşturduğumuz tüm sınıf sabitleri otomatik olarak her yerden ulaşılabilir, yani public oluyordu. Artık bunu kendimiz belirleyebiliyoruz.

class Example
{
  const VERSION = 1;
  public const AUTHOR = 'Mustafa Zahid Efe';
  protected const POST_PER_PAGE = 5;
  private const TOKEN = 'blablabla';
}

Multi-Catch Hata Yakalama

PHP’nin eski sürümlerinde try bloğundan sonra catch bloğu içerisine sadece bir tane Exception sınıfı verebiliyorduk. Bundan sonra istediğimiz kadar verebileceğiz. Örneğimize bakalım hemen:

try {
  ...
} catch (AnException | AnotherException $e) {
  ...
}


<h3>Stringlerde Negatif Eleman Alma</h3>
Tam olarak nasıl ifade edeceğimi bilemedim. Türkçeye çevirmesi biraz problemli bir başlıktı bu. Örneği verdiğimde daha rahat anlayacaksınız.


$string = 'Zahid Efe';
var_dump($string[-1]);

Yukarıdaki kodu çalıştırdığımızda kodumuzun çıktısı 'string(1) "e"' olacaktır. Örnekten de anlayacağınız üzere artık negatif değerler vererek string ifadelerin karakterlerine tersten erişebiliyoruz.

Düzeltmeler ve Geliştirmeler

  • Mcrypt eklentisi kaldırıldı.
  • mb_ereg_replace ve mb_eregi_replace fonksiyonları için eval seçeneği kaldırıldı.
  • DateTime eklentisine mikro saniye desteği eklendi.
  • Geçersiz stringlerle aritmetiksel işlem yapma sorunu çözüldü.

Son maddeyi biraz açmak istiyorum. Sizlere PHP 7.0 sürümünden bir örnek göstermek istiyorum.

Gördüğünüz gibi iki string ifade de sayı içeriyorsa bunlarla aritmetik işlemler yapabiliyorum. Eğer ifadelerden biris sayı içeriyor (Örnek olarak "5 elma") ve diğeri hiçbir sayı içermiyorsa ikinci string ifademiz de 0 sayılıyor (Yani sonucumuz 5 + 0'dan yine 5 oluyor.). PHP 7.1 ile birlikte bu sorun ortadan kaldırılmış oldu. PHP 7.1, bizim string ifadelerimizden içinde sayı olanlar için NOTICE yani bildirim hatası verirken az önce verdiğim örnekteki gibi içerisinde hiç sayı olmayan string ifadelerimiz için de WARNING yani uyarı veriyor. Örnek hataları gösterdiğimde daha iyi anlayacaksınız.

Merak edenler için kodları online olarak farklı sürümlerde denediğim sitenin adresi şu: http://sandbox.onlinephpfunctions.com/

3 Mart 2017

Tip Sisteminde Genişletme

PHP 7.0 sürümü ile artık parametrelerimize hangi tipte olması gerektiğini söyleyebiliyorduk ve fonksiyonların return typelarını belirleyebiliyorduk. PHP'nin 7.1 sürümüyle beraber artık return typelar arasına void de girmiş durumda. Olaydan tamamen bihaber arkadaşlar için aşağıda 7.0 ile gelen kısmından da bahsettim.

Diyelim ki bir fonksiyonunuz var ve aldığı ilk parametre bir tam sayı yani integer bir değer olmak zorunda. Önceden bu tarz işlemler için koşullar yazardık. if (gettype($parameter)) gibisinden şeyler. Artık bunlara ihtiyaç kalmadı. Bunu biz sadece parametreyi oluştururken yazacağız ve PHP bizim yerimize işi halledip geçersiz veriler girildiğinde tepki gösterecek. Hemen örnek kodumuzu verelim.

 

function swap(int &$a, int &$b) :void {
  if ($a === $b)
    return;
  $tmp = $a;
  $a = $b;
  $b = $tmp;
}

Birçoğumuzun yazılım hayatı boyunca en az bir kez yazmış olduğu bir kod parçasını örnek verdik. Tabi önceden böyle yazmazdık, bu biraz daha modern hali. Şimdi hemen kısa bir açıklama geçeyim. swap adında bir fonksiyon oluşturduk ve bu fonksiyonun parametrelerini belirlerken parametrelerden önce int yazdık. Biz bu şekilde bir ifade kullandığımızda PHP artık bizim bu fonksiyona sadece bir integer parametre alabileceğimiz anlamış oluyor ve eğer aksi bir durum varsa yorumlama sırasında hata döndürüyor.

Aslında bu özellik PHP 7.0 sürümünde de vardı. Peki buraya yeni gelen ne ?

Buraya yeni gelen şey return type olarak void belirleyebiliyor olmamız. PHP'nin 7.0 sürümünde :int, :string, :bool gibi dönüş tipleri belirleyebiliyorduk. 7.1 ile bunların arasında :void de katılmış durumda.

Yeni gelen özelliklerden birisi de yinelenebilir yani iterable tipi. Örnek olarak döngüye sokmak istediğiniz bir veri var elinizde. Bunun döngüye sokulacak bir veri olduğunu iterable ile belirtebilirsiniz. Hemen bir örnek kod verelim olay daha rahat anlaşılsın.

function iterator(iterable $iter) {
  foreach ($iter as $it) {
    ... 
  }
}

Iterable/Iterator konusu ile alakalı gözatmanızı tavsiye ettiğim bir döküman mevcut: http://php.net/manual/en/class.iterator.php

Söylememe gerek var mı bilmiyorum ama iterable tipini bir return type olarak da kullanabilirsiniz.

Son olarak da nullify geliyor. Örnek bir fonksiyon oluşturalım ve diyelim ki bu fonksiyon bu parametreyi alabilir de almayabilir de. Veya bu parametre dolu da olabilir null da olabilir. İşte bu tarz durumlarda nullify (?) kullanıyoruz. Hemen örneğimizi verelim.

function username(?User $user) : string {
  return $user ? $user->username : ‘Guest’;
}

Direkt olarak dökümana erişme şansınız yok maalesef. Mail adresinizi veriyorsunuz ve size mail atıyorlar o yüzden dökümanın bağlantısını paylaşma şansım yok ama isterseniz sitepoint.com üzerinden erişebilirsiniz.

if there is an issue about copyrights kindly contact me.

PHP Mustafa Zahid Efe Yorum yapılmamış