PHP 8 dalam delapan bagian kode

PHP 8 memiliki banyak fitur baru, dalam daftar ini kita akan melihat yang paling menonjol.

Penafian: Tautan ke artikel ini dalam bahasa Inggris sudah ada di pos intisari PHP terakhir. Jika Anda cukup tahu bahasa, mungkin layak untuk pergi ke aslinya, ada banyak catatan kaki untuk artikel berbahasa Inggris lainnya.

Waktu


use \Support\Attributes\ListensTo;

class ProductSubscriber
{
    <<ListensTo(ProductCreated::class)>>
    public function onProductCreated(ProductCreated $event) { /* … */ }

    <<ListensTo(ProductDeleted::class)>>
    public function onProductDeleted(ProductDeleted $event) { /* … */ }
}

Alih-alih docblock, atribut.

Ya, saya tahu, sintaksisnya mungkin tidak seperti yang Anda inginkan atau harapkan. Mungkin Anda lebih suka @, @:, atau docblock, atau yang lainnya. Tapi dia akan tetap seperti itu. Satu-satunya hal yang layak disebutkan tentang sintaks adalah bahwa semua opsi telah dibahas, dan ada alasan yang sangat bagus mengapa sintaks ini dipilih. Anda dapat membaca ringkasan singkat ini di RFC , atau Anda dapat membaca seluruh diskusi tentang RFC dalam daftar komponen internal .



Dua


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

public function bar(mixed $input): mixed;

Menggabungkan jenis memungkinkan Anda menentukan beberapa jenis sekaligus. Ada juga tipe campuran baru yang mewakili beberapa jenis secara bersamaan.



Tiga


interface Foo
{
    public function bar(): static;
}

Anda dapat menentukan statis dalam tipe pengembalian.



Empat


[JIT]
opcache.jit=5

Kompiler JIT bawaan.

Apa itu JIT?

"JIT" berarti "tepat waktu" - "pada waktu yang tepat." Anda mungkin tahu bahwa PHP adalah bahasa yang diartikan: itu tidak dikompilasi sebagai program di C, Java, atau Rust. Sebaliknya, ini diterjemahkan ke dalam kode mesin - sesuatu yang dimengerti prosesor - saat runtime.

"JIT" adalah metode yang mengkompilasi bagian dari kode saat runtime sehingga versi yang dikompilasi dapat digunakan sebagai gantinya.

Anggap saja sebagai "versi cache" dari kode yang ditafsirkan yang dihasilkan saat runtime.

Secara lebih rinci sudah menulis di Habré



Lima


$triggerError = fn() => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

lemparan dapat digunakan dalam ekspresi.



Enam


try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

Anda bisa menghilangkan variabel pengecualian jika Anda tidak membutuhkannya.



Tujuh


public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // …
}

Anda dapat menentukan koma di akhir daftar parameter.



Delapan


str_contains('string with lots of words', 'words');

str_starts_with('haystack', 'hay');

str_ends_with('haystack', 'stack');

Fungsi string baru. Saya pikir nama mereka berbicara sendiri.
Jangan menipu diri kita sendiri: 8 blok kode tidak cukup untuk merangkum semua hal baru yang hebat di PHP 8. Jadi, mari kita tambahkan beberapa lagi.



Sembilan


function bar(Stringable $stringable) { /* … */ }

Antarmuka Stringable baru yang secara otomatis ditambahkan ke kelas yang mengimplementasikan metode __toString ().



Sepuluh


$object::class

Memanggil :: kelas langsung dari objek.



All Articles