spot_img
Saturday, April 20, 2024
spot_img
HomeTechBilgi TeknolojisiPHP 8.1'deki Yenilikler Nelerdir? Nesne Depolama İçin Bir S3 Alternatifi Kullanmalı...

PHP 8.1’deki Yenilikler Nelerdir? Nesne Depolama İçin Bir S3 Alternatifi Kullanmalı mısınız? Kubernetes Pod’ları ve Makineniz Arasında Nasıl Dosya Kopyalarsınız Github Kimlik Doğrulaması için HTTPS Kişisel Erişim Belirteçleri Nasıl Kurulur Docker Bağlantı Noktasını Gösterme ve Yayınlama Arasındaki Fark Nedir? Linux’ta lshw Nasıl Kullanılır (Pratik Bir Örnekle) DigitalOcean Damlacık Meta Verilerine Nasıl Erişilir ve Kullanılır

-

PHP Logosu

PHP 8.1, Kasım 2021’de PHP dilinin en son küçük sürümü olarak yayınlandı. Bazı küçük iyileştirmeler ve performans geliştirmelerinin yanı sıra birkaç yeni dil özelliği ekler. Dikkat edilmesi gereken birkaç önemli değişiklik var, ancak PHP 8.0’dan yapılan yükseltmelerin çoğu basit olmalıdır.

Yeni özellikler

Bu yılki PHP güncellemesi, geliştirici üretkenliğini artırmak için birkaç yeni özellik ekliyor. Yükseltmeden sonra kullanabilecekleriniz aşağıda belirtilmiştir.

numaralar

Enum türleri nihayet PHP dilinin bir parçasıdır. Bir değerin önceden tanımlanmış bir dizi sabitten biri olması gerektiğini belirtmenize izin verirler.

Normal sabitlerle karşılaştırıldığında, numaralandırmalar, yöntem parametreleri ve dönüş değerleri olarak kullanıldığında size yerleşik doğrulama sağlar. Ayrıca, ekstra davranış ekleyen destek değerlerine ve yöntemlerine de sahip olabilirler.

# PHP 8.0
class PostStatus {
    const Draft = 1;
    const Published = 2;
}
 
# PHP 8.0 - Cannot typehint that the value 
#           of `$PostStatus` must be defined 
#           within `PostStatus`.
class Post {
    public function __construct(
        public string $Headline,
        public int $PostStatus) {}
}
 
# PHP 8.1
enum PostStatus {
    case Draft = 1;
    case Published = 2;
}
 
# PHP 8.1 - Now it's impossible to pass an 
#           invalid value as the status.
class Post {
    public function __construct(
        public string $Headline,
        public PostStatus $PostStatus) {}
}

Salt Okunur Özellikler

Yeni readonly anahtar kelime, bir sınıf özelliğini değişmez olarak işaretler. Salt okunur özellikler yalnızca bir kez yazılabilir. Başlattıktan sonra değerlerini değiştirmeye çalışmak bir hata verecektir.

Reklamcılık

Bu, basit değişmez değer nesnelerinin oluşturulmasını basitleştirir. Önceden, değişiklik yapılmasına izin vermeden özellik değerlerini ortaya çıkarmak istiyorsanız, bir sınıfa tekrarlayan yöntemler eklemeniz gerekiyordu. Şimdi özellikleri yapabilirsiniz public kasıtsız mutasyonları riske atmadan.

# PHP 8.0 - This quickly becomes repetitive!
class Post {
    public function __construct(
        protected string $Headline) {}
 
    public function getHeadline() : string {
        return $this -> Headline;
    }
}
 
# PHP 8.1
class Post {
    public function __construct(
        public readonly string $Headline) {}
}

Kavşak Tipleri

PHP’nin tür sistemi artık kesişmeleri anlıyor. Bunlar, bir değerin birden çok arabirim uygulaması gerektiğini belirtmenize olanak tanır.

Bu, kodun iki farklı arabirim tarafından tanımlanan örnek yöntemlerini çağırması gerektiğinde kullanışlıdır. Önceden, istediğiniz her ikisini de genişleten yeni bir arayüz oluşturmanız gerekiyordu. Yeni arayüzünüzü uygulamak için hedef sınıfı değiştiremediğiniz durumlarda bu her zaman pratik değildi.

Kavşaklar, iki veya daha fazla türün bir ve işareti karakteriyle birleştirilmesiyle tanımlanır. PHP 8.0’da birleşim türlerinin tanıtılmasından sonra tür sistemine daha fazla esneklik katıyorlar. Bir uyarı, şu anda kavşak ve birleşim türlerini birlikte kullanamazsınız – Countable&Stringable|CustomType bu sürümde limit dışıdır.

# PHP 8.0
interface CountableString extends Countable, Stringable {}
 
public function countAndReport(CountableString $value) : void {
    echo "$value: " . count($value);
}
 
# PHP 8.1
public function countAndReport(Countable&Stringable $value) : void {
    echo "$value: " . count($value);
}

lifler

Fiberler, eşzamanlı yürütmeyi kolaylaştıran mekanizmalardır. Yığının herhangi bir yerinden askıya alınabilen, devam ettirilebilir kod bloklarını uygulamayı kolaylaştırırlar.

Fibers API nispeten düşük seviyelidir. Son kullanıcı geliştiricilerinin onunla düzenli olarak etkileşime girmesi beklenmez. Bunun yerine Fibers, zaman uyumsuz API’ler ve olay döngüsü uygulamaları sunan kitaplıklara entegre edilecektir. Basitleştirilmiş üst düzey soyutlamalar sağlayan bir kontrol akış sistemidir.

Reklamcılık

Fiberler, normal eşzamanlı işlemlere benzeyen zaman uyumsuz işlev çağrılarına giden bir yol sunar. Vaatler ve geri aramalarla ilgili ortak kalıpları kesebilirsiniz. Fiberler, uygun noktalarda kodun askıya alınmasını ve devam ettirilmesini yöneterek, operasyonların uygulamalarının bloke edilmesi ve bloke edilmemesi için bir API sunar.

# PHP 8.0 - A promise-based HTTP client
$response = $httpClient -> request("http://example.com")
    -> then(function (Response $Response) {
        return $Response -> getBody();
    });
print $response;
 
# PHP 8.1 - An HTTP client using Fibers internally
$response = $httpClient -> request("https://example.com");
print $response -> getBody();

Birinci Sınıf Çağrılabilirler

Callable’lar artık PHP dilinde birinci sınıf vatandaşlardır. Bu, eski dizi sözdizimini veya açık kapatma oluşturmayı kullanmadan değişkenlere doğrudan işlev atayabileceğiniz anlamına gelir.

Bu değişiklik en çok işlevsel programlama bağlamlarında faydalı olacaktır. Doğrudan değişken atama ile işlevlerin geçişi daha temiz ve daha kolaydır.

# PHP 8.0
$builtin = Closure::fromCallable("array_filter");
$method = [$this, "getData"];
 
# PHP 8.1
$builtin = array_filter(...);
$method = $this -> getData(...);

NS ... işlevin parametrelerinin değiştirilmesi sözdiziminin zorunlu bir parçasıdır. Bu, işlevi çağırıp dönüş değerini atamak yerine işlevi değişkene atamak istediğinizi belirtir.

Yeni Initializer’ları Kullanma

Bir diğeri yeni özellik new başlatıcılarda anahtar kelime. Artık nesne örneklerini varsayılan parametre değerleri olarak kullanabilirsiniz:

# PHP 8.0
class SendNewsletterAction {
    protected Mailer $Mailer;
    public function __construct(?Mailer $Mailer=null) {
        $this -> Mailer = $Mailer ?? new SmtpMailer();
    }
}
 
# PHP 8.1
class SendNewsletterAction {
    public function __construct(
        protected readonly Mailer $Mailer=new SmtpMailer()) {}
}
Reklamcılık

NS new anahtar kelime ayrıca statik değişkenler, genel sabitler ve öznitelik bağımsız değişkenleriyle de çalışır. Varsayılan değer olarak bir nesne örneğini istediğinizde size daha fazla esneklik ve kolaylık sağlar.

Son Sınıf Sabitleri

NS final anahtar kelime artık sınıf sabitleri için destekleniyor. Tek tek sabitleri şu şekilde işaretleyebilirsiniz: final tüm sınıfı mühürlemeden. Daha önce alt sınıflar, ebeveynlerden devralınan sabitlerin değerinin üzerine yazmakta özgürdü.

# PHP 8.0 - Cannot disallow this without 
#           making the whole class `final`
class DemoClass {
    public const DemoConstant = 1;
}
class ChildClass extends DemoClass {
    public const DemoConstant = 2;
}
 
# PHP 8.1 - Just the constant can be `final`.
class DemoClass {
    final public const DemoConstant = 1;
}
class ChildClass extends DemoClass {
    // Raises a fatal error
    public const DemoConstant = 2;
}

Diğerleri

PHP 8.1, yukarıda listelenen büyük bilet öğelerinin yanı sıra, kodun daha fazla kendi kendini belgelemesine yardımcı olan birkaç kolaylık özelliği de ekler. Sekizli sayıları açık bir gösterimle yazabilirsiniz, örneğin 0o14ve yenisini kullanın never bir istisna oluşturacak veya geçerli komut dosyasından çıkacak işlevleri belirtmek için dönüş türü. Bu, statik analiz yazılımında ölü kod algılamasını bilgilendirmeye yardımcı olur.

Standart kitaplıkta birkaç yeni işlev vardır. array_is_list() bir dizinin liste olup olmadığını kontrol etmenizi sağlar (["foo", "bar"]) veya ilişkisel (["foo" => "bar"]), mevcut kullanıcı alanı kodunda yaygın olarak bulunan bir işlev için yerleşik bir uygulama sağlar. fsync() ve fdatasync() dosya işaretçisi değişikliklerini temeldeki depolama ortamına geri senkronize etmenize izin verir. XChaCha20 ve Ristretto255 karma algoritmaları için sodyum desteği de eklendi.

Son olarak, bu sürüm performans iyileştirmeleri olasılığını da beraberinde getiriyor. Sınıf devralma önbelleğini içeren optimizasyonlar, %8’e kadar ücretsiz performans artışı sağlayabilir. Bu, en çok, birçok ebeveyn-çocuk ilişkisine sahip, yoğun şekilde nesne yönelimli kod tabanlarında fark edilir. PHP şimdi bu bağlantıları önbelleğe alacak, böylece onları sürekli olarak yeniden oluşturmayacaktır.

Geriye Uyumsuz Değişiklikler

Küçük bir sürüm yükseltmesi olarak, yükseltmeden önce bilmeniz gereken birkaç önemli değişiklik ve kullanımdan kaldırma vardır. Kod tabanınızda sorun olması en muhtemel olanlar şunlardır:

  • üzerine yazmak $_GLOBALS diziye artık izin verilmiyor. Yine de tek tek tuşlara yazabilirsiniz ancak yeniden atayamazsınız $_GLOBALS kendisi.
  • Yerleşik bir sınıfı genişletirseniz, geçersiz kılınan yöntemleriniz orijinaliyle uyumlu bir dönüş türü bildirmelidir. Uyumsuz bir tür belirtirseniz bir kullanımdan kaldırma uyarısı verilir. A #[ReturnTypeWillChange] öznitelik şu anda birden çok PHP sürümünü desteklemesi gereken kitaplıklar için bundan kaçınmanın bir yolu olarak desteklenmektedir.
  • Geçen null iç işlevlerin null olmayan parametrelerine kullanımdan kaldırıldı. Buna daha önce izin veriliyordu, ancak kullanıcı tarafından oluşturulan işlevler için yazım ipucu zorlaması ile tutarsızdı.
  • örtük yayınlar int ile float kullanımdan kaldırıldı – bu, aşağıdaki gibi senaryoları etkiler: $array[10.1]dizilerin tamsayı anahtarlarına sahip olması gerektiğinden mantis kaybolacak.
  • PHP’nin devam eden kaldırma çalışmalarının bir parçası olarak resource türler, birkaç işlev grubu artık kaynaklar yerine yeni nesnelerle çalışıyor. Bu değişiklikler FileInfo, FTP, IMAP, LDAP, PgSQL ve PSpell API’leri için geçerlidir.
  • Aşağıdaki gibi HTML varlıklarıyla çalışan işlevler htmlspecialchars() ve htmlentities() şimdi varsayılan olarak kesme işaretlerinden kaçın, bu yüzden ' Olacak '.
  • Nitelikler üzerinde doğrudan statik yöntemlerin çağrılması kullanımdan kaldırılmıştır; bunun yerine özelliği kullanan bir sınıfta yöntemi çağırmalısınız.

Diğer kaldırma ve kullanımdan kaldırma işlemleri, PDO, MySQLi ve Standard dahil olmak üzere bağımsız API’leri etkiler. Projenizi yükseltmeden önce geçiş kılavuzunun tamamını gözden geçirmelisiniz.

Reklamcılık

Birlikte ele alındığında, bu döngünün değişiklikleri oldukça zararsızdır. Modern PHP en iyi uygulamalarıyla zaten uyumlu olan kod tabanları, 8.1’e geçerken çok fazla sorunla karşılaşmamalıdır. Symfony ve Laravel gibi popüler çerçeveler de PHP 8.1’i zaten destekliyor.

Çözüm

PHP 8.1, geliştirme deneyimini daha kolay ve daha akıcı hale getiren birçok yeni özellik ekler. Numaralandırmalar, salt okunur özellikler ve new başlatıcılarda yeni sınıflar yazmayı daha hızlı hale getirecektir.

Fiberler, zaman uyumsuz PHP’yi daha ulaşılabilir hale getirmeye yardımcı olurken, birinci sınıf çağrılabilirler, işlevsel programlama tekniklerini uygularken akıcı işlev referanslarını kolaylaştırır. Tüm bu değişiklikler PHP’yi, kodunuz için güçlü güvenlik garantileri sunarken aynı zamanda üzerinde çalışılması basit olan esnek bir dil olarak daha da olgunlaştırıyor.

Related articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0FollowersFollow
0SubscribersSubscribe
spot_img

Latest posts