PHP 8.2'deki Yenilikler: Kapsamlı Bir Genel Bakış
Yayınlanan: 2023-10-17Yaygın olarak kullanılan sunucu tarafı kodlama dili olan PHP, web geliştirmenin sürekli değişen taleplerini karşılamak için sürekli olarak gelişmektedir. PHP 8.2'nin Kasım 2022'de piyasaya sürülmesi, birçok heyecan verici özelliği, önemli kullanımdan kaldırmaları ve önemli hata düzeltmelerini beraberinde getiriyor. Bu makalede, PHP 8.2'deki yeniliklerin dikkate değer yönlerini derinlemesine inceleyerek geliştiricilerin bu son sürümden neler bekleyebileceklerine ışık tutacağız.
İçindekiler
Yeni özellikler
1. Numaralandırmalar: Tip Güvenliğine Giriş
Belki de PHP'ye en çok beklenen eklemelerden biri olan sürüm 8.2, nihayet numaralandırmalar (numaralandırmalar) için yerel destek sunuyor. Numaralandırmalar, geliştiricilerin açık türlerle bir dizi adlandırılmış değer tanımlamasına olanak tanıyarak PHP'ye önemli bir tür güvenliği katmanı ekler.
İşte numaralandırmaların nasıl çalıştığına dair basit bir örnek:
enum Color { case RED; case GREEN; case BLUE; }
Numaralandırmalar aynı zamanda ilişkili değerlere de sahip olabilir, bu da onları çeşitli kullanım durumları için çok yönlü hale getirir. Bu özellik, kodunuzun okunabilir, bakımı yapılabilir kalmasını ve sabitlerin veya sihirli sayıların yanlış kullanımından kaynaklanan hatalara daha az eğilimli kalmasını sağlamak açısından özellikle faydalıdır.
2. Yapıcı Promosyonu: Standart Kodun Azaltılması
PHP 8.2, sınıf tanımlarını basitleştirmeyi ve standart kodları azaltmayı amaçlayan bir özellik olan yapıcı tanıtımını sunar. Yapıcı yükseltmeyle, sınıf özelliklerini doğrudan yapıcının parametre listesinde bildirebilir ve başlatabilirsiniz. Bu, ayrı özellik bildirimlerine olan ihtiyacı ortadan kaldırarak kodunuzu daha kısa ve bakımı kolay hale getirir.
class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }
Yapıcı tanıtımı, kod tabanınızdaki dağınıklığı azalttığı için birçok özelliğe sahip sınıflarla uğraşırken özellikle değerlidir.
3. Salt Okunur Sınıflar
PHP 8.2'de salt okunur sınıflar, geliştiricilerin genellikle nesne oluşturma sırasında yalnızca bir kez ayarlanabilecek özelliklere sahip sınıflar tanımlamasına olanak tanır. Bu, özelliklerin nesnenin ömrü boyunca sabit kalmasını sağlar. Salt okunur özellikler salt okunur değiştirici kullanılarak bildirilir ve sınıf yapıcısında başlatılmaları gerekir.
PHP 8.2 ile süreç tamamen basitleştirildi:
class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
4. "include" ve "require" İfadelerindeki Adlandırılmış Argümanlar
PHP 8.2'de artık dosya eklerken veya talep ederken adlandırılmış argümanlar kullanılabiliyor. Bu özellik, özellikle birden fazla argüman kabul eden işlevlerle çalışırken kodun okunabilirliğini artırır.
include filename: 'my_file.php', once: true;
Bu argümanlara ad vererek kodunuzu daha açıklayıcı hale getirirsiniz ve yanlış argüman sırası nedeniyle hata oluşma olasılığını azaltırsınız.
5. Örtülü Parantezlere İlişkin Kullanımdan Kaldırma Bildirimleri
Kod tutarlılığını ve okunabilirliğini geliştirmek için PHP 8.2, parantez olmadan çağrılan işlevler ve yöntemler için kullanımdan kaldırma bildirimleri sunar. Henüz bir hata olmasa da bu, geliştiricilere, işlevleri çağırırken parantezleri tutarlı bir şekilde kullanma yönünde önerilen uygulamayı benimsemeleri konusunda bir uyarı görevi görüyor.
// Deprecated usage myFunction; // Recommended usage myFunction();
PHP, örtülü parantezlerin önüne geçerek kodun netliğini ve sürdürülebilirliğini geliştirmeyi amaçlamaktadır.
6. Hassas Parametre Değerlerinin Gizlenmesi Desteği
PHP, herhangi bir program durumunda çağrı yığınını izleme yeteneği sağlar; bu, özellikle uygulama sorunlarını giderirken değerli olduğunu kanıtlar. Ancak bazı durumlarda yığın izleri, gizlenmeyi gerektiren gizli ayrıntılar içerebilir.
PHP 8.2'de "SensitiveParameter" adlı yeni bir özellik tanıtılacaktır. Bu öznitelik, bir uygulama hatalarla karşılaştığında hassas verilerin görüntülenmesini veya günlüğe kaydedilmesini engellemeye yarar. Pratik açıdan kullanımı şu şekilde görünecektir:
function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
7. mysqli_execute_query Fonksiyonunun ve mysqli::execute_query Yönteminin Tanıtımı
Web geliştirme için çok yönlü kodlama dili olan PHP, yeteneklerini ve kullanım kolaylığını geliştirmek için sürekli olarak gelişmektedir. PHP 8.2'de geliştiriciler iki yeni özelliğin tanıtımını bekleyebilirler: mysqli_execute_query işlevi ve mysqli::execute_query yöntemi. Bu eklemeler, veritabanı etkileşimlerini düzene koymak ve basitleştirmek için tasarlanmış olup, MySQL veritabanlarıyla çalışmayı daha da kolay hale getirmektedir.
mysqli_execute_query İşlev
mysqli_execute_query işlevi PHP'nin MySQLi uzantısına güçlü bir eklentidir. MySQL veritabanına karşı SQL sorgularını yürütmek için özel olarak tasarlanmıştır. Bu işlev, SQL sorguları göndermenin ve sonuçları almanın basit ve etkili bir yolunu sunar. İşte kullanımına dair kısa bir örnek:
$mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();
mysqli_execute_query işlevi, parametre bağlama yoluyla güvenliği korurken sorgu hazırlama ve yürütme sürecini kolaylaştırır.
mysqli::execute_query Yöntem
Yeni işleve ek olarak PHP 8.2, MySQLi sınıfının bir parçası olarak mysqli::execute_query yöntemini sunar. Bu yöntem, nesne yönelimli programlamayı tercih eden geliştiriciler için sorgu yürütmeyi basitleştirir. İşte kullanımına bir örnek:
$mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();
mysqli::execute_query yöntemi, veritabanı sorgularının yürütülmesine nesne yönelimli bir yaklaşım sunarak, bu tarz kodlamayı tercih eden geliştiriciler için daha sezgisel bir deneyim sağlar.
8. Özelliklerde Sabitlere İzin Ver: Kodun Yeniden Kullanılabilirliğini ve Sürdürülebilirliğini Artırma
Özellikler, PHP de dahil olmak üzere modern programlama dillerinde, geliştiricilerin kalıtıma ihtiyaç duymadan kodu farklı sınıflarda yeniden kullanmalarına olanak tanıyan değerli bir özelliktir. PHP özellikleri öncelikle yöntemler sağlar, ancak PHP 8.2'de dikkate değer bir geliştirme eklenmiştir: özellikler içindeki sabitleri tanımlama yeteneği. Bu özellik, geliştiricilere kod tasarımlarında daha fazla esneklik sunarak kod organizasyonunu, yeniden kullanılabilirliği ve sürdürülebilirliği geliştirmeyi amaçlamaktadır.
PHP'de Özelliklerin Rolü
Sabitlerin niteliklere eklenmesi konusuna girmeden önce, özelliklerin PHP'deki rolüne kısaca tekrar bakalım. Özellikler, PHP gibi tek kalıtımlı dillerde kodun yeniden kullanımına yönelik bir mekanizmadır. Birden çok sınıfta yeniden kullanılabilecek bir dizi yöntem tanımlamanıza olanak tanırlar. Bir sınıf bir özelliği kullandığında, bu özellikte tanımlanan yöntemleri miras alarak kod modülerliğini artırır ve fazlalığı azaltır.
trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}
Bu örnekte Loggable özelliği, özelliği içeren herhangi bir sınıf tarafından kullanılabilecek, kodun sürdürülebilirliğini ve organizasyonunu geliştiren bir günlük yöntemi sağlar.
Özelliklerdeki Sabitler: Yeni Bir Özellik
PHP 8.2 ile geliştiriciler artık özellikler içindeki sabitleri tanımlayabiliyor; bu, PHP'nin önceki sürümlerinde mümkün değildi. Özelliklerdeki sabitler, sınıflardaki sabitlere benzer şekilde çalışır ancak bu özelliği kullanan sınıflarda bunlara erişilebilir.
trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }
Bu örnekte, Yapılandırma özelliği, özelliği kullanan Database sınıfından erişilebilen bir MAX_CONNECTIONS sabitini tanımlar. Bu, konfigürasyon sabitlerinin merkezileştirilmesine olanak tanır ve daha organize ve sürdürülebilir bir kod yapısını destekler.
9. PHP 8.2'de Yeni Ayırıcı Normal Form (DNF) Türlerinin Tanıtımı
Dinamik ve çok yönlü bir kodlama dili olan PHP, web geliştirmenin giderek artan taleplerini karşılamak için gelişmeye devam ediyor. PHP 8.2'nin piyasaya sürülmesiyle geliştiriciler yeni Ayırıcı Normal Form (DNF) türlerinin tanıtımıyla karşı karşıyalar. Dile yapılan bu ekleme, PHP'nin ifade gücünü ve esnekliğini geliştirerek geliştiricilerin karmaşık mantıksal ifadelerle daha etkili bir şekilde çalışmasına olanak tanır.
Ayırıcı Normal Formu (DNF) Anlamak
PHP 8.2'deki yeni DNF türlerini derinlemesine incelemeden önce, Ayırıcı Normal Formun (DNF) mantıkta neyi temsil ettiğini anlamak önemlidir. DNF, her ifadenin bağlaçların (AND) bir ayrımı (OR) olduğu mantıksal ifadeleri temsil eden kanonik bir formdur. Daha basit bir ifadeyle, karmaşık mantıksal ifadeleri OR operatörlerinin bir araya getirdiği bir dizi basit koşula ayırmanın bir yoludur.
Örneğin, (A VE B) VEYA (C VE D) mantıksal ifadesi DNF'dedir çünkü bu iki bağlacın ayrılmasıdır.
PHP 8.2'deki Yeni DNF Türleri
PHP 8.2, mantıksal ifadelerle daha sezgisel bir şekilde çalışmanın ve bunları değiştirmenin bir yolu olarak yeni DNF türlerini sunar. Bu DNF türleri, karmaşık mantığın işlenmesi için daha yüksek düzeyde bir soyutlama sağlayarak geliştiricilerin kodlarındaki karmaşık koşulları yönetmesini kolaylaştırır.
Yeni DNF türlerine ve bunların nasıl kullanılabileceğine ilişkin bir genel bakış burada yer almaktadır:
1. AyırıcıNormalForm
DisjunctiveNormalForm türü, DNF'deki mantıksal ifadeleri temsil eder. Karmaşık koşulları kapsüllemek için DisjunctiveNormalForm örnekleri oluşturabilirsiniz:
$dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);
Bu örnekte $dnfExpression, DNF ifadesini (A VE B) VEYA (C VE D) temsil eder.
2. Bağlaç
Bağlaç türü, bir veya daha fazla koşulun birleşimini (AND) temsil eder. Karmaşık bağlaçlar oluşturmak için Bağlaç örnekleri oluşturabilirsiniz:
$conjunction = new Conjunction('A', 'B', 'C');
Burada $bağlaç bağlacı (A VE B VE C) temsil eder.
3. Mantıksal Değer
LogicalValue türü, doğru, yanlış veya değişken olabilen basit mantıksal değerleri temsil eder. Daha karmaşık ifadeler oluşturmak için diğer DNF türleriyle birlikte kullanılabilir:
$value = new LogicalValue('A');
Burada $value, A mantıksal değişkenini temsil eder.
10. AllowDynamicProperties Özelliğine Giriş: PHP'de Esnekliği Artırma
"AllowDynamicProperties" özelliği, özellikle dilin dinamik doğasına değer veren geliştiriciler için PHP'ye dikkate değer bir eklentidir. Bu öznitelik ile, bir nesnenin kendi sınıfında açıkça tanımlanmamış özellikleri kabul etmesini ve değiştirmesini sağlayabilirsiniz.
Burada "AllowDynamicProperties" özelliğinin nasıl uygulanabileceğine dair basit bir örnek verilmiştir:
class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;
Bu örnekte "DynamicObject" sınıfı, özelliklerin dinamik olarak eklenmesine ve bunlara erişilmesine olanak tanıyan "AllowDynamicProperties" özniteliğiyle işaretlenmiştir. Bu dinamik davranış, çeşitli veri yapılarına uyum sağlaması gereken nesnelerle uğraşırken veya API'ler gibi harici kaynaklardan alınan verilerle çalışırken özellikle yararlı olabilir.
PHP 8.2'deki Kullanımdan Kaldırmalar ve Kaldırmalar
- Uzantılar: PHP 8.2, "oci8", "mysql", "mcrypt" ve "interbase" dahil olmak üzere birçok eski ve bakımı yapılmamış uzantıya veda etti. Bu uzantılara güvenen geliştiricilerin, uygulamalarının güvenliğini ve istikrarını sağlamak için modern alternatiflere geçmeleri şiddetle tavsiye edilir.
- her() İşlevi : Every() işlevi artık resmi olarak PHP 8.2'de kullanımdan kaldırılmıştır. Bu işlev, dahili işaretçiyi ilerleterek ve geçerli anahtar/değer çiftini döndürerek diziler üzerinde yineleme yapmak için kullanıldı. Bununla birlikte, çeşitli sorunları vardı ve yerini büyük ölçüde daha iyi okunabilirlik ve bakım kolaylığı sunan foreach döngüleri aldı.
- create_function() İşlevi : create_function() işlevi kullanımdan kaldırılmış olarak işaretlendi. Bu işlev, dinamik olarak anonim işlevler oluşturmak için kullanıldı, ancak güvenlik kaygıları ve kapatma gibi daha iyi alternatifler nedeniyle önerilmedi.
- FILTER_SANITIZE_MAGIC_QUOTES Filtre Bayrağı : FILTER_SANITIZE_MAGIC_QUOTES filtre bayrağı kullanımdan kaldırıldı. Bu bayrak, tek tırnak ve çift tırnak gibi karakterlerden önce eğik çizgi ekleyerek girişi temizlemek için filter_var() ile birlikte kullanıldı. Modern en iyi uygulamalar, veritabanı girişini işlemek için hazırlanmış ifadelerin ve parametreli sorguların kullanılmasını önererek bu bayrağın geçerliliğini yitirmesine neden olur.
- stristr() İşlevi : Bir dizedeki bir alt dize için büyük/küçük harfe duyarlı olmayan bir arama gerçekleştiren stristr() işlevi kullanımdan kaldırıldı. Hala işlevsel olsa da, geliştiricilerin daha iyi netlik sağlamak için büyük/küçük harfe duyarlı olmayan sürümü, stripos()'u veya str_contains() alternatiflerini kullanmaları teşvik edilir.
- Dizi Bağımsız Değişkenleriyle define() : Dizilerle sabitleri değer olarak tanımlamak için define() işlevinin kullanılması artık kullanımdan kaldırılmıştır. Sabitleri dizilerle değer olarak tanımlamak mümkün olsa da, bu uygulamanın alışılmadık olduğu düşünülür ve sabitlerin tipik olarak skaler değerleri olması gerekir.
- SORT_NUMERIC ve SORT_REGULAR Bayrakları : sort() ve usort() gibi sıralama işlevlerine yönelik SORT_NUMERIC ve SORT_REGULAR bayrakları kullanımdan kaldırıldı. PHP, öğelerin veri türünü otomatik olarak algılayıp bunları buna göre sıraladığından artık bu bayraklara gerek yok.
Performans geliştirmeleri
PHP 8.2, çeşitli performans geliştirmeleri ve optimizasyonları içeriyor. Bu iyileştirmelerin kapsamı özel kullanım durumunuza bağlı olarak değişiklik gösterse de, PHP 8.2'ye yükseltmenin bazı önemli performans avantajları sağlaması muhtemeldir. Bu iyileştirmeler, yüksek trafiğe sahip uygulamalar veya yoğun kaynak kullanan görevler gerçekleştiren uygulamalar üzerinde önemli bir etkiye sahip olabilir ve bu uygulamaları daha duyarlı ve verimli hale getirebilir.
Hata Düzeltmeleri ve Kararlılık
Her yeni PHP sürümünde olduğu gibi, PHP 8.2 de çok sayıda hata ve kararlılık sorununu giderir. Bu düzeltmeler, dilin genel güvenilirliğini korumak ve PHP'nin web geliştirme için sağlam bir seçim olmaya devam etmesini sağlamak açısından çok önemlidir.
SSS - PHP 8.2'deki yenilikler
PHP 8.2'de örtülü parantezlerin kullanımdan kaldırılma bildirimleri neden tanıtıldı?
Örtülü parantezler için kullanımdan kaldırma bildirimleri, geliştiricileri işlevleri çağırırken parantez kullanmaları konusunda uyararak tutarlı kod stilini teşvik eder. Bu, kodun netliğini ve sürdürülebilirliğini artırır.
Salt okunur sınıflar nelerdir ve PHP 8.2'de nasıl çalışırlar?
PHP 8.2'deki salt okunur sınıflar, özelliklerin genellikle nesne oluşturma sırasında yalnızca bir kez ayarlanmasına olanak tanır ve bu özelliklerin nesnenin ömrü boyunca sabit kalmasını sağlar. Salt okunur özellikler salt okunur değiştirici kullanılarak bildirilir.
PHP 8.2'de mysqli_execute_query işlevi ve mysqli::execute_query yöntemi veritabanı etkileşimlerini nasıl basitleştirir?
Bu özellikler, SQL sorgularının MySQL veritabanında yürütülmesi sürecini kolaylaştırarak, prosedürel veya nesne odaklı bir şekilde sorgu göndermenin ve sonuçları almanın etkili ve güvenli yollarını sağlar.
"AllowDynamicProperties" özelliği PHP 8.2'deki esnekliği nasıl genişletir?
"AllowDynamicProperties" özelliği, nesnelerin kendi sınıflarında açıkça tanımlanmamış özellikleri kabul etmesine ve değiştirmesine olanak tanıyarak PHP'nin dinamik doğasını geliştirir.
PHP 8.2'de hata düzeltme ve kararlılık neden önemlidir?
PHP 8.2'deki hata düzeltmeleri ve kararlılık iyileştirmeleri, dilin genel güvenilirliğini korumak, sorunları ele alarak ve kararlılığını artırarak PHP'nin web geliştirme için sağlam bir seçim olarak kalmasını sağlamak için çok önemlidir.
Çözüm
Sonuç olarak PHP 8.2, sürekli gelişen web geliştirme ortamında çok önemli bir kilometre taşı olarak ortaya çıkıyor. Çok çeşitli yenilikçi özellikler, gelişmiş esneklik ve performans optimizasyonları ile dünya çapındaki geliştiricilerin gelişen taleplerini karşılamaktadır.
Numaralandırmaların, yapıcı tanıtımının, salt okunur sınıfların, adlandırılmış bağımsız değişkenlerin ve AllowDynamicProperties özelliğinin kullanıma sunulması, geliştiricilere daha temiz, daha bakımı kolay kod yazma olanağı sağlar. Ek olarak, yeni Ayırıcı Normal Form (DNF) türleri PHP'ye gelişmiş mantık düzenleme yetenekleri getirerek çok yönlülüğünü daha da genişletir. Bununla birlikte, PHP ilerledikçe, güncelliğini yitirmiş uzantılara ve işlevlere de veda ederken, hataları özenle giderir ve web geliştirme için güvenilir ve güvenli bir seçim olarak kalmasını sağlar.
İlgili İçerik:
"WordPress PHP Güncellemesini Devre Dışı Bırakmak Gerekiyor" Hatası Nasıl Düzeltilir (2 yöntem)
MySQL Yavaş Sorgu Günlükleri