PHP 8 Yayınlandı! - Örneklerle Değişiklikler

Whistle

I LIKE LikapaTR
Kurucu
Kurumsal Üye
Geliştirici
Yardımsever Üye
Mesaj
11.912
Çözümler
564
Beğeni
13.323
Puan
5.915
Ticaret Puanı
2
Web geliştiriciliğinde sıklıkla kullanılan PHP dilinin 8. versiyonu 26 Kasım 2020 tarihinde duyuruldu.
PHP 8 ile nelerin değiştiğini öğrenmek isterseniz
Linkleri görebilmek için giriş yap veya kayıt ol.
bakabilirsiniz.

İlgili sayfada gösterilen örnekler;

Named Arguments​

php 7
PHP:
Genişlet Daralt Kopyala
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

php 8
PHP:
Genişlet Daralt Kopyala
htmlspecialchars($string, double_encode: false);


Attributes​

php 7
PHP:
Genişlet Daralt Kopyala
class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

php 8
PHP:
Genişlet Daralt Kopyala
class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}

Burada ideler için yazdığımız fonksiyonunun açıklamalarını eklerken /* */ yorum satırları içerisinde yazabiliyorduk. Artık # ile de açıklamaları yazabileceğiz.


Constructor property promotion​

php 7
PHP:
Genişlet Daralt Kopyala
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;
  }
}

php 8
PHP:
Genişlet Daralt Kopyala
class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Burda ise sınıf içerisinde değişken tanımlıyorduk. Artık php8 ile beraber __construct içerisinde değişkenleri oluşturup değer atabiliyoruz.

Union types​

php 7
PHP:
Genişlet Daralt Kopyala
class Number {
  /** @var int|float */
  private $number;

  /**
   * @param float|int $number
   */
  public function __construct($number) {
    $this->number = $number;
  }
}

new Number('NaN'); // Ok

php 8
PHP:
Genişlet Daralt Kopyala
class Number {
  public function __construct(
    private int|float $number
  ) {}
}

new Number('NaN'); // TypeError

Sınıflara tanımladığımız değişkenlerin hangi tür alabileceğini /** */ yorum satırları içerisine ekleyebiliyorduk. php8 ile beraber yorum satırlarını kullanmadan veritürlerini tanımlayabiliyoruz. Ve artık belirlediğimiz veritüründen farklı bir değer gelirse sistem hata yazdıracak.

Match expression​

php 7
PHP:
Genişlet Daralt Kopyala
switch (8.0) {
  case '8.0':
    $result = "Oh no!";
    break;
  case 8.0:
    $result = "This is what I expected";
    break;
}
echo $result;
//> Oh no!

php 8
PHP:
Genişlet Daralt Kopyala
echo match (8.0) {
  '8.0' => "Oh no!",
  8.0 => "This is what I expected",
};
//> This is what I expected

Bu örnekte ise switch yapısını daha pratik şekilde kullanma yöntemini gösteriyor.

Nullsafe operator​

php 7
PHP:
Genişlet Daralt Kopyala
$country =  null;

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

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

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

php 8
PHP:
Genişlet Daralt Kopyala
$country = $session?->user?->getAddress()?->country;

Her değer için tek tek if blokları açmak yerine örnekteki gibi tek satırda kontrol edebileceğiz.
Eğer sıralardan herhangi birisi başarısız olursa devamını getirmeyecek boş değer atacak.
Bu gayet iyi bi özellik olmuş. :)


php 8 ile yeni gelen attribute özelliği hakkında detaylı bilgi edinmek için şu videoyu izleyebilirsiniz;
 
Aga beee , yaşlanıyorum :) şimdi baştan HTML 5 , CSS3 ve PHP 8 öğrenmem lazım :( HTML 4 , CSS ve PHP 5.6 bana yetiyordu ama yenilik iyidir
 
Bilişim sektörü sürekli güncellenen bir alan. Yani sürekli öğrenmeye alışmak gerekiyor. Bu sadece php, html ve css için geçerli değil. Birçok alanda geçerli. Uyum sağlayabilen, yeniliklere çabuk adapte olabilen hayatta kalır. :D
 
Üst