PHP 7.4 ilə nələr dəyişir? Hansı yeni özəlliklər gəlir?

PHP 7.4 ilə nələr dəyişir? Hansı yeni özəlliklər gəlir?

PHP 7.4 ilə bir çox yenilik gəlir və bəzi şeylər dəyişir. Öncə gələn yeniliklərə nəzər salaq daha sonrasında isə nələrin dəyişəcəyinə baxaq.

Arrow funksiyalar

Arrow funksiyalarını “qısaldılmış funksiya” olaraq adlandıra bilərik. Kiçik və qısa funksiyalar artıq tək sətr olaraq yazıla biləcək.

Əvvəl:

array_map(function (User $user) { 
    return $user->id; 
}, $users)

Yeni versiya:

array_map(fn (User $user) => $user->id, $users

Arrow funksiyaları ilə bağlı bir neçə qeyd:

  • Arrow olaraq yazılmış funksiyalar üst dəyişkənlərə use termini olmadan müdaxilə edə bilər.
  • $this yalnızca normal closure sinifləri ilə işlədilə bilər
  • Arrow funksiyalar yalnızca bir return’a sahib tək sətirlik funksiya ola bilər.

Təkminləşdirilmiş növ (tip) fərqliliyi

Covariant(ziddiyyətli ?*) return tipləri yaza biləcəksiniz:

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}

Covariant(ziddiyyətli ?*) arqumentlər

class A
{
    public function contraVariantArguments(ChildType $type)
    { /* … */ }
}

class B extends A
{
    public function contraVariantArguments(ParentType $type)
    { /* … */ }
}

Yeni null operatoru

Yeni null operatoru ilə daha oxunaqlı bir operator yazmaq mümkün olacaq

Əvvəl:

$data['date'] = $data['date'] ?? new DateTime();

İndi:

$data['date'] ??= new DateTime();

Array yayılma operatoru

Yeni versiyada array_merge və + operatoru olmadan daha qısa və asan yoldan həll etmək mümkün olacaq

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

Rəqəmsal ayırıcı operator

PHP 7.4 ilə rəqəmsal dəyərləri vizual(görsəl) olaraq ayırmaq üçün alt tre _ işlədilə bilinəcək

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;

Xarici Funksiya İnterfeysi (Foreign function interface)

FFI ilə istifadəçi tərəfindən C kodunu çağırmaq mümkün olacaq. FFI haqda daha geniş yazmaq olar amma çox qarışıqdı. Uzun sözün qısası bu özəllikdən yararlanmaq üçün C dilini yaxşı səviyyədə bilmək lazım olacaq.

Paylaşılmış kitabxanadan (.DLL) funksiya çağırmaq:

<?php
// create FFI object, loading libc and exporting function printf()
$ffi = FFI::cdef(
    "int printf(const char *format, ...);", // this is regular C declaration
    "libc.so.6");
// call C printf()
$ffi->printf("Hello %s!\n", "world");

Preloading

PHP’nin preloading özəlliyi dahada təkminləşdirilib və daha sürətli işləyir.
Qısaca: əgər bir framework işlədirsinizsə, bu frameworkun faylları hər request’də yenidən yüklənir. Preloading özəlliyi ilə isə bu fayllar server başlayan zaman tək səfərdə yüklənir və ram üzərində saxlanılır. Beləliklə hər request’də yenidən yüklənərək sürəti azaltmır.

Yeni xüsusi obyekt tipləri

Yeni versiya ilə 2 yeni metod əlavə edilib. Bunlar __serialize__unserialize .

class A implements Serializable {
    private $prop;
    public function serialize() {
        return serialize($this->prop);
    }
    public function unserialize($payload) {
        $this->prop = unserialize($payload);
    }
}
class B extends A {
    private $prop;
    public function serialize() {
        return serialize([$this->prop, parent::serialize()])
    }
    public function unserialize($payload) {
        [$prop, $parent] = unserialize($payload);
        parent::unserialize($parent);
        $this->prop = $prop;
    }
}

Reflection for references

final class ReflectionReference {
    /* Returns ReflectionReference if array element is a reference, null otherwise. */
    public static function fromArrayElement(array $array, int|string $key): ?ReflectionReference;
 
    /* Returns unique identifier for the reference. The return value format is unspecified. */
    public function getId(): int|string;
 
    private function __construct(); // Always throws
    private function __clone(); // Always throws
}

mb_str_split

Bu funksiya str_split ilə eynidir lakin multi-byte(çoxlu byte) dəstəkləyir.

<?php 
print_r(mb_str_split("github", 2));
 
--EXPECT--
 
Array
(
    [0] => gi
    [1] => th
    [2] => ub
)

Mənbə: PHP Wiki

Bu məqalə yenilənməyə davam edir*

One thought on “PHP 7.4 ilə nələr dəyişir? Hansı yeni özəlliklər gəlir?”

Bir cavab yazın

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir