Fiber (PHP 8.1)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 60 dari 91.
Fiber adalah fitur PHP 8.1 yang memungkinkan eksekusi kode dihentikan sementara. Tidak seperti fungsi biasa yang berjalan dari awal hingga akhir, fiber dapat menjeda eksekusinya sendiri di tengah jalan dan melanjutkannya nanti, sambil mempertahankan statusnya di antara jeda.
Buat fiber dengan meneruskan callable ke class Fiber, lalu mulai dengan start():
<?php
$fiber = new Fiber(function(): void {
echo "Step 1\n";
Fiber::suspend();
echo "Step 2\n";
});
$fiber->start();
echo "Between steps\n";
$fiber->resume();
Output:
Step 1
Between steps
Step 2Fiber berjalan sampai mencapai Fiber::suspend(), lalu kendali kembali ke kode utama. Memanggil resume() melanjutkan eksekusi dari tempatnya berhenti.
Fiber juga dapat meneruskan nilai saat ditangguhkan dan dilanjutkan kembali:
<?php
$fiber = new Fiber(function(): string {
$value = Fiber::suspend("paused");
return "Received: $value";
});
$suspended = $fiber->start();
echo "$suspended\n";
$result = $fiber->resume("hello");
echo $result;
output:
paused
Received: helloFiber adalah dasar bagi framework PHP asinkron. Meskipun kamu tidak akan menggunakannya secara langsung di sebagian besar aplikasi, memahaminya akan membantu saat bekerja dengan library asinkron yang menangani operasi bersamaan, seperti permintaan HTTP atau query database, tanpa memblokir proses.
Tantangan
MudahMari kita buat penjadwal tugas yang menunjukkan cara fiber dapat menjeda dan melanjutkan eksekusi sambil meneruskan data antara fiber dan kode utama. Kamu akan membuat sistem yang memungkinkan tugas dihentikan sementara, sehingga pekerjaan lain dapat dilakukan di antaranya.
Kamu akan mengatur kodemu dalam dua file:
TaskRunner.php: Buat classTaskRunneryang membungkus fungsionalitas fiber untuk menjalankan tugas. Class ini harus:- Memiliki property privat untuk menyimpan instance
Fiber - Menerima nama tugas (string) di constructornya menggunakan constructor promotion
- Memiliki method
createTask(callable $task)yang membuat Fiber baru dengan callable yang diberikan dan menyimpannya - Memiliki method
start()yang memulai fiber dan mengembalikan nilai yang digunakan fiber saat menjeda eksekusi (atau nilai kembalian akhir) - Memiliki method
continue(mixed $value)yang melanjutkan fiber dengan nilai yang diberikan dan mengembalikan nilai berikutnya saat fiber menjeda eksekusi (atau nilai kembalian akhir) - Memiliki method
isFinished(): boolyang mengembalikan apakah fiber telah berhenti
- Memiliki property privat untuk menyimpan instance
main.php: Sertakan file TaskRunner. Kamu akan menerima dua input: nama tugas dan pesan untuk dikirim ke fiber.Buat
TaskRunnerdengan nama tugas yang diberikan, lalu gunakancreateTask()untuk mendefinisikan tugas yang:- Awalnya menjeda eksekusi dengan string
"Waiting for input" - Menerima nilai saat eksekusi dilanjutkan
- Mengembalikan
"Completed: [received value]"
Mulai tugas dan cetak nilai yang dikembalikannya saat pertama kali menjeda eksekusi. Lalu cetak
"Processing..."untuk menunjukkan pekerjaan yang berlangsung di antara jeda fiber. Terakhir, lanjutkan fiber dengan meneruskan input pesan, lalu cetak hasil akhirnya.- Awalnya menjeda eksekusi dengan string
Tantangan ini menunjukkan cara fiber memungkinkan multitasking kooperatif. Tugasmu menjeda dirinya sendiri pada titik yang sesuai, kode utama melakukan pekerjaan lain, lalu tugas dilanjutkan dengan data baru. Fiber mempertahankan statusnya selama proses tersebut dan melanjutkan tepat dari titik terakhirnya.
Coba sendiri
<?php
require_once 'TaskRunner.php';
// Baca input
$taskName = trim(fgets(STDIN));
$message = trim(fgets(STDIN));
// TODO: Buat TaskRunner dengan nama tugas yang diberikan
// TODO: Gunakan createTask() untuk mendefinisikan tugas yang:
// 1. Pertama-tama berhenti sementara dengan string "Waiting for input"
// 2. Menerima nilai saat dilanjutkan
// 3. Mengembalikan "Completed: [received value]"
// TODO: Mulai tugas dan cetak nilai yang dikembalikan saat tugas pertama kali berhenti sementara
// TODO: Cetak "Processing..." untuk menunjukkan pekerjaan yang berlangsung di antara jeda fiber
// TODO: Lanjutkan fiber dengan memasukkan input pesan
// TODO: Cetak hasil akhir
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa10Konsep OOP Lanjutan
Komposisi vs PewarisanInjeksi Dependensiclass AnonimEnum (PHP 8.1)Fiber (PHP 8.1)Pendalaman Kloning objectGenerator dan Iterator2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online