Neler yeni

Php 8 ile gelen yenilikler

Turgut K.

İlaydam
Ad
Soyad
Katılım
23 Eylül 2019
Konum
Çorum
Konular
109
Mesajlar
444
Ticaret - 0%
0   0   0
  
iletişim
Meslek
Şahsına Münhasır
php8.png


PHP, en kolay programlama dillerinden biridir. İyi bir öğretmen ve doğru motivasyonla, birkaç saat içinde ilk kodları nasıl yazacağınızı ve ilk komutları nasıl uygulayacağınızı öğrenebilirsiniz. PHP 7, arama motoru sıralamalarını olumlu yönde etkileyen bir hız optimizasyonunu beraberinde gelmişti. Şimdi açık kaynak la, 8.0 sürümüne yükselip büyük bir güncelleme aldı.

Bununla birlikte, PHP dilinde yazılmış birçok web sitesi, mümkün olduğunca eski sürümleri kullanmaya devam etmektedir (tavsiye edilmese de). Web sitesinin arkasındaki kodu güncel tutmak ve yeni PHP sürümlerine yükseltmek çeşitli avantajlar sunar: yeni özellikler, daha fazla olasılık anlamına gelir, performans önemli ölçüde artabilir ve güvenlik açıkları kapatılır.

Eski kod kullanmak sorunlara neden olur mu?
PHP 8 büyük bir güncelleme olduğundan, önceki sürümlerdeki kodların artık uyumlu olmayabileceğini bilmelisiniz. Bununla birlikte, sorunlara neden olabilecek değişikliklerin çoğu zaten 7.2, 7.3 ve 7.4 sürümlerinde bildirimişti.

Mevcut değişiklikler:

  • The real type
  • Magic quotes legacy
  • array_key_exists() with objects
  • FILTER_SANITIZE_MAGIC_QUOTES filter
  • Reflection export() methods
  • mb_strrpos() with encoding as 3rd argument
  • implode() parameter order mix
  • Unbinding $this from non-static closures
  • hebrevc() function
  • convert_cyr_string() function
  • money_format() function
  • ezmlm_hash() function
  • restore_include_path() function
  • allow_url_include ini directive
Kodlarını güncel tutmaya özen gösteren kullanıcılar, önceki sürümlerle uyumlu değişiklikler içermeyen büyük bir sürüm olmasına rağmen büyük sorunlar yaşamayacaktır. Tüm değişikliklerin tam listesi resmi PHP 8 proje sayfasında bulunabilir.

PHP 8 nasıl çalışıyor?
PHP'nin yeni sürümü, özellikle web geliştiricilerine birçok ek olanak sunan bazı yenilikleri beraberinde getiriyor.

JIT Derleyici
En büyük haber, performansı önemli ölçüde artırması beklenen JIT Derleyicisidir. PHP derlenmez, ancak satır satır yorumlanır. Just in Time (JIT) derleyicisi, çalışma zamanı sırasında kodun bölümlerini derlemekten sorumludur ve kodun önbelleğe alınmış bir sürümüne çok benzer şekilde çalışır.

Pedro Escudero da bu yeni PHP 8 işlevini ikna edici bir şekilde test etti: Basit bir betik kullandı ve 5.3, 7.4 ve 8 sürümlerini karşılaştırdı; ikincisi JIT'li ve JIT'siz. Bunu yapmak için, senaryoyu her sürüm için yüz kez çalıştırdı ve ortalama süreyi kaydetti.

Aşağıdaki tabloda kaydedilen ortalama değerleri:



VersiyonSaniye
5.30.64574003219604
7.4

0.10253500938416
8 (JIT siz)0.098223924636841
8 (JIT li)0.053637981414795

JIT'siz 7.4 ile 8 arasında çok büyük bir fark olmasa da, JIT donanımlı 8 versiyonu ile durum değişiyor. JIT derleyicisi,% 45'in üzerinde bir performans artışı sağladığını görüyoruz.

Union Types
Union Types (birleşim türleri), C / C ++, TypeScript ve hatta Haskell gibi diğer dillerden zaten bilinmektedir. Bu işlev, birleşim için iki veya daha fazla türü yetkilendirmenize izin vererek bunların her birini kullanmayı mümkün kılar. Karşılıklı gelen kod şuna benzer:

public function foo(Foo|Bar $input): int|float;

Ancak, void herhangi bir değer döndürmediği için Birlik Türünün parçası olamayacağı için bir kısıtlama vardır. Ayrıca, **** yapılabilir birleşimler |**** veya ? İle yazılabilir, aşağıdaki örnekte olduğu gibi:

public function foo(Foo|**** $foo): void; public function bar(?Bar $bar): void;

Static return type​

Statik, özel bir sınıf adıdır ve yeni sürümde, kendisi ve ebeveyn ile birlikte self & parent'te geçerli Return Type bir parçasıdır.

WeakMaps
WeakRef'ler PHP 7.4'te zaten eklenmişti, şimdi WeakMaps ile PHP 8 bu işlevin uzantısını sunuyor. WeakMaps ve WeakRef'ler, yalnızca önbellek nesnelerin varlık sınıflarına atıfta bulunuyorsa nesneleri temizlemek için kullanılabilir. Bu, nesnelerin yönetiminde kaynak tasarrufu sağlar. Dokümantasyondan alınan bir örnek:

class FooBar { private WeakMap $cache; public function getSomethingWithCaching(object $obj) { return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj); } // ... }

Nesneler için ::class kullanın
Önceki sürümlerde, nesneleri bir sınıfa atamak için get_class () kullanmak gerekliydi. Artık kaynak kodu daha hafif bırakarak nesneler için ::class kullanabilirsiniz.

Stringable interface
Dizilebilir arabirim, __toString () yöntemini uygulayan sınıflara otomatik olarak eklenir. Şimdiye kadar bu adımın manuel olarak yapılması gerekiyordu. Kod şu şekilde görünür:

class Foo { public function __toString(): string { return 'foo'; } } function bar(Stringable $stringable) { /* … */ } bar(new Foo()); bar('abc');

Fdiv () işlevi
Yeni fdiv () işlevi 0'a bölmenize izin verir. Buna karşılık olarak INF, -INF veya NAN dönüş değerlerini alırsınız.

Type annotations
Yeni sürümde, tüm dahili yöntemler ve işlevler için tür açıklamaları eklenmiştir.

Type errors
Şimdiye kadar, yalnızca bazı kullanıcı tanımlı işlevler TypeErrors'a neden olurken, dahili işlevlerde **** hatası ile karşılaşılırdı. PHP 8'den itibaren dahili işlevler bile type hataları geri çevirebilir.

engine warnings yeni sınıflandırması
Şimdiye kadar birçok hata oldu, ardından bir uyarı veya bir ipucu geldi. Şimdi bu da değişti. Belgelerde, tüm yeni PHP hata uyarılarının tam bir listesini bulacaksınız.

@ önemli hataları engellemeyecek
Bu yeni işlev aynı zamanda hataları tanımlamanıza da olanak tanır.
@ Kontrol operatörünü kullanarak hataları bastırmak yerine, sunucuda display_errors = Off ayarını yaptığınızdan emin olun.

Büyülü yöntemlerin doğru imzaları
PHP'nin önceki sürümlerinde, beklenen imzayla eşleşmeyen imzalarla sihirli yöntemler yazmak mümkündü, örneğin __clone(): float veya __isset(): Closure. PHP 7.0'ın piyasaya sürülmesinden bu yana, sihirli yöntemlerin doğru kullanımı yalnızca rastgele kontrol edilmiştir. İmzaların doğruluğunu sağlamak için yeni sürüme çeşitli parametre ve dönüş değeri kontrolleri eklenmiştir.

Reflection (Yansıma)
Burada da Reflection sınıfının imzaları değiştirildi. Yansıma aslında şu şekilde yazılmıştı:

ReflectionClass::newInstance($args); ReflectionFunction::invoke($args); ReflectionMethod::invoke($object, $args);

PHP 8'de artık bu şekilde yazılacaktır:
ReflectionClass::newInstance(...$args); ReflectionFunction::invoke(...$args); ReflectionMethod::invoke($object, ...$args);

PHP 7 ve PHP 8'i aynı anda desteklemek istiyorsanız, aşağıdaki kodu kullanabilirsiniz:

ReflectionClass::newInstance($arg = ****, ...$args); ReflectionFunction::invoke($arg = ****, ...$args); ReflectionMethod::invoke($object, $arg = ****, ...$args);
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Gece/Gündüz modunu seç

Gece ve gündüz modlarından tarzınıza yada ihtiyaçlarınıza uygun olanı seçerek kullana bilirsiniz.

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Izgara yada normal mod

Temanızda forum listeleme yapısını ızgara yapısında yada normal yapıda listemek için kullanabilirsiniz.

Forum arkaplan resimleri

Forum arkaplanlarına eklenmiş olan resimlerinin kontrolü senin elinde, resimleri aç/kapat

Sidebar blogunu kapat/aç

Forumun kalabalığında kurtulmak için sidebar (kenar çubuğunu) açıp/kapatarak gereksiz kalabalıklardan kurtula bilirsiniz.

Yapışkan sidebar kapat/aç

Yapışkan sidebar ile sidebar alanını daha hızlı ve verimli kullanabilirsiniz.

Radius aç/kapat

Blok köşelerinde bulunan kıvrımları kapat/aç bu şekilde tarzını yansıt.