PHP çox sayda istifadəçi tərəfindən veb inkişaf məqsədləri üçün istifadə edilən skript dilidir. PHP-nin ən son stabil və yenilənmiş versiyası 8.3 23.11.2023-cü il tarixində buraxılmışdır. 2000-ci ildə buraxılan PHP 3.x-dən sonra bir çox yeniliklər və dəyişikliklər baş verdi. PHP hələ də çox geniş auditoriya tərəfindən istifadə edilən ən populyar veb inkişaf (veb dizayn) dilləri arasındadır. Bu yazıda PHP 8.3-dəki yenilikləri və dəyişiklikləri kod nümunələri ilə araşdırıb təhlil edəcəyik.
PHP 8.3 Əsas Yeni Xüsusiyyətlər və Təkmilləşdirmələr
PHP-nin əvvəlki versiyası olan PHP 8.2 ilə müqayisədə PHP 8.3-də bir çox əsas yeniliklər və təkmilləşdirmələr var. Eyni zamanda, bəzi xüsusiyyətlər köhnəlmişdir. İndi yenilikləri və təkmilləşdirmələri kod nümunələri ilə bir-bir araşdıracağıq.
Tiplənmiş sinif sabitləri
Tipin elan edilməsi tərtibatçılar üçün sabitliyi artıran və veb inkişafında səhv nisbətlərini azaldan çox vacib bir xüsusiyyətdir. PHP 7.4-də sinifdəki xassələr üçün tip elanı xüsusiyyəti əlavə edilmişdir. Sonrakı versiyalarda bu funksiyaya bir çox təkmilləşdirmələr edilsə də, bu xüsusiyyət hələ də sinifdəki sabitlər üçün mövcud deyildi. PHP 8.3 ilə indi siniflərdə sabitlər üçün tip elan etmək mümkündür.
// Doğru kullanım:
class MyClass {
// Bildirilen tür ve değer aynı
const string VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür ile değer farklı
const int VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür sınıf sabitleri için desteklenmiyor
const void VERSION = "PHP 8.3"; // değer string
}Bəzi növ bəyannamələr sinif sabitləri üçün dəstəklənmir.
Sinif sabitləri üçün dəstəklənməyən tip bəyannamələri: void, callable, never
Yeni funksiya: json_validate()
JSON formatında verilənlərlə işləyərkən (json-kodlaşdırılmış məlumat) verilənlərdən istifadə etməzdən əvvəl daxil olan məlumatların etibarlı olduğunu yoxlamaq lazımdır. Biz bunu PHP 8.3-dən əvvəlki versiyalarda aşağıdakı və ya oxşar üsullardan istifadə edərək edirdik.
// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// $data ile gerçekleştirilecek işlemler
}Bu köhnə nümunədə, JSON məlumatlarını təsdiq edərkən, PHP məlumatların ölçüsündən asılı olaraq əhəmiyyətli yaddaş istehlak edə bilər. PHP 8.3-də performans yönümlü sürətli həlli yaradan yeni PHP funksiyası əlavə edildi: json_validate(). Bu funksiyanın istifadə ssenarisini aşağıda nümunə göstərdik.
// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_validate($maybeJSON)) {
// $data ile gerçekleştirilecek işlemler
}Yeni Xüsusiyyət: #[Dəyişdir]
PHP-də interfeysləri həyata keçirərkən biz interfeysdəki metodlar üçün ətraflı funksionallıq təmin edirik. Sinif nümunəsini yaratarkən, eyni ad və uyğun imza ilə alternativ versiya yaradaraq ana metodu ləğv edə bilərik. Bu proqram təminatında böyük problemlər yarada bilər. Qısacası, problem ondadır ki, gözdən qaçan kiçik bir yazı səhvi nəticəsində əsas metodu ləğv etdiyimizi düşünürük.
PHP 8.3 #[Override] funksiyası bu problemin həllini təmin edir. İndi bunu nümunədə görək.
class A {
protected function myOverrideFunc(): void {}
// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
#[\Override]
public function myOverrideFunc(): void {}
// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
#[\Override]
public function myOverrideFunction(): void {}
}Yalnız oxunan Xüsusiyyətlərin Dərin Klonlaşdırılması
PHP, PHP 8.1-də fərdi sinif xüsusiyyətlərini yalnız oxumaq kimi elan etmək və PHP 8.2-də onları bütün sinfə təyin etmək imkanını təqdim etdi. Bununla belə, əksər veb tərtibatçıları belə xüsusiyyətləri olan siniflərlə işləyərkən qoyulan məhdudiyyətlərin proqramlaşdırma məntiqində praktikliyin qarşısını aldığını düşünürdü.
Bunu dəyişdirmək üçün RFC İki əsas tövsiyə verildi:
yalnız oxumaq üçün
readonlyuzadılmasına icazə verilməyən dərslərə icazə verirreadonlyklonlama zamanı funksiyaların yenidən işə salınmasına imkan verir
İkinci təklif PHP 8.3-ə daxil edilmişdir. Bu yeni yanaşma PHP 8.3-ə əlavə edildi readonly xassələri olan sinif nümunələrireadonly xassələri) __clone Sehrli üsulu ilə onu yenidən işə salmağa imkan verir.
RFC-dən bu kod nümunəsi bu yeni metodun necə işlədiyini anlamağa kömək edə bilər:
Sinif sabitlərinin və say üzvlərinin dinamik əldə edilməsi
PHP-nin digər xüsusiyyətlərindən fərqli olaraq, dəyişən adları olan sinif sabitlərinin və enum üzvlərinin tutulması bir qədər mürəkkəbdir. PHP 8.3-dən əvvəl biz bunu aşağıdakı nümunə kimi edə bilərdik:
class Foo {
public function __construct(
public readonly DateTime $bar,
public readonly DateTime $baz
) {}
public function __clone() {
// Klon çağrıldığında $bar yeni bir DateTime alacak
$this->bar = clone $this->bar;
// Ardından bu metod çağrılacak
$this->cloneBaz();
}
private function cloneBaz() {
// Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;class MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 10;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;İndi PHP 8.3-də yuxarıdakı misaldakı sinif və enum təriflərindən istifadə edərək dəyərləri əldə edək:
$constantName = 'THE_CONST';
$memberName = 'FirstNumber';
echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;Yeni Metod: getBytesFromString()
Deyə bilərik ki, PHP 8.3-ə əlavə edilmiş funksiyalar arasında bu üsul ən gözlənilməz idi: Əvvəlcədən təsdiqlənmiş simvollar toplusundan istifadə edərək təsadüfi mətnin yaradılması.
Bu yeni üsul çox sadə və aydındır. Resurs kimi metoda bəzi simvollar veririk və onlardan neçəsini istifadə etmək istədiyimizi müəyyənləşdiririk. Hamısı budur! İndi metodumuz müəyyən uzunluğa çatana qədər təsadüfi simvollarla nəticələri qaytaracaq. İndi bunu bir misalla aydınlaşdıraq
$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';
$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veriÇıxışın göstərdiyimiz simvolların ümumi uzunluğundan daha uzun olması mümkündür. Bunu aşağıdakı nümunədə etdik:
$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';
$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veriParametr kimi verdiyimiz bütün simvollar fərqlidirsə, hansının seçilmə ehtimalı bərabərdir. Bununla belə, dəstəklənən simvollar siyahısına eyni simvoldan birdən çoxunu əlavə etməklə çıxışda eyni xarakterdən daha çoxunu göstərə bilərik. Bunu növbəti nümunədə göstərdik.
$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';
$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veriYeni üsullar: getFloat() və nextFloat()
Bu yenilikdə PHP 8.3 PHP-nin təsadüfi genişləndirilməsini genişləndirən iki yeni metod təqdim edir: getFloat() və nextFloat().
Bu üsullara bir nümunə:
$generateRandomNumber = new Random\Randomizer();
// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri
// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veriPHP-də kiçik yeniliklər və təkmilləşdirmələr 8.3
Yuxarıda göstərilən yeniliklərə əlavə olaraq, PHP 8.3-də onlarla başqa kiçik miqyaslı təkmilləşdirmələr və yeniliklər var. Biz onları mənbə sənədləri ilə birlikdə aşağıdakı siyahıda sadaladıq.
- DOMElement sinfi üçün yeni üsullar:
DOMElement::getAttributeNames(),DOMElement::insertAdjacentElement(),DOMElement::insertAdjacentText(),DOMElement::toggleAttribute(),DOMNode::contains(),DOMNode::getRootNode(),DOMNode::isEqualNode()DOMNameSpaceNode::() və ehtiva edirMParentNode::replaceChildren(). - IntlCalendar sinfi üçün yeni üsullar:
IntlCalendar::setDate(),IntlCalendar::setDateTime(),IntlGregorianCalendar::createFromDate()vəIntlGregorianCalendar::createFromDateTime(). - Yeni LDAP funksiyaları: ldap_connect_wallet() və ldap_exop_sync().
- yeni
mb_str_pad()çox baytlı sətir funksiyası (çox baytlı sətir funksiyası). - Yeni POSIX funksiyaları:
posix_sysconf(),posix_pathconf(),posix_fpathconf()vəposix_eaccess(). - Yeni üsul:
ReflectionMethod::createFromMethodName() - Yeni rozetka funksiyası:
socket_atmark(). - Yeni sətir (mətn) funksiyaları:
str_increment(),str_decrement(), vəstream_context_set_options(). - Yeni ZipArchive sinif metodu:
ZipArchive::getArchiveFlag(). - Maksimum icazə verilən yığın ölçüsünü təyin etmək üçün yeni php.ini parametri:
zend.max_allowed_stack_size.
PHP 8.3-də köhnəlmişdir
PHP-nin hər yeni versiyası ilə bəzi kodlar köhnəlmək üçün qeyd olunur. Tamamilə köhnəldikdən sonra bu funksiyalardan istifadə etmək heç vaxt tövsiyə edilmir. Köhnəlmiş kod istifadə edilərsə, kod icra edildikdə səhv mesajı qaytarılacaq.
PHP 8.3-də köhnəlmələrin siyahısı:
- U_MULTIPLE_DECIMAL_SEPARATORS sabiti köhnəlmişdir.
- Mt19937
3MT_RAND_PHPVariant köhnəlmişdir. ReflectionClass::getStaticProperties()artıq null edilə bilməz.- PHP.ini parametrləri
assert.active,assert.bail,assert.callback,assert.exceptionvəassert.warningköhnəlmişdir. get_class()vəget_parent_class()köhnəlmişdir.
PHP 8.3
Bu yazıda biz PHP 8.3-dəki mühüm dəyişiklikləri və yenilikləri nəzərdən keçirdik. PHP 8.3-dəki bütün dəyişikliklərin daha ətraflı siyahısı üçün rəsmi dəyişiklik jurnalı Onu nəzərdən keçirməyi tövsiyə edirik. Kodlarınızı və ya saytınızı PHP 8.2-dən PHP 8.3-ə yüksəltmək istəyirsinizsə, bu təlimat faydalı ola bilər: PHP 8.3 Miqrasiya Bələdçisi -> https://www.php.net/manual/en/migration83.php
Əgər PHP versiyaları və miqrasiya ilə bağlı narahatlığınız varsa, PHP 8.3-ə yüksəltmək üçün yeni versiyaya bir az vaxt verməyi tövsiyə edirik.
PHP və JavaScript dilləri və Onur Özden Web Çözümleri kimi əlaqəli texnologiyaların tam əhatəsi Veb Proqram təminatı xidmətləri təklif edirik. Sualınız və ya sorğunuz varsa, qiymət almaq üçün sol altda yerləşən Whatsapp düyməsi vasitəsilə tez bizimlə əlaqə saxlaya bilərsiniz.



