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


Whistle

Ruhsuz Filozof
Mesaj
9.310
Beğeni
4.431
Puan
2.584
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:
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

php 8
PHP:
htmlspecialchars($string, double_encode: false);


Attributes​

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

php 8
PHP:
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:
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:
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:
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:
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:
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:
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:
$country =  null;

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

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

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

php 8
PHP:
$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;
 

Hyuna Akali

I wanna be developer.
Mesaj
659
Beğeni
483
Puan
804
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
 

Whistle

Ruhsuz Filozof
Mesaj
9.310
Beğeni
4.431
Puan
2.584
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