


Corak bersyarat lanjutan untuk membina aplikasi PHP yang fleksibel
Gunakan mod dasar untuk menggantikan logik bersyarat dengan tingkah laku yang boleh ditukar ganti; 2. Gunakan mod objek kosong untuk menghapuskan pemeriksaan nilai null; 3. Gunakan mod keadaan untuk membuat objek mengubah tingkah laku mengikut keadaan dalaman; 4. Menggabungkan peraturan perniagaan yang kompleks melalui mod spesifikasi; 5. Menggabungkan mod arahan dengan pengawal untuk mencapai kawalan pelaksanaan tanpa syarat; 6. Gunakan pengedaran berasaskan kelas untuk menggantikan pernyataan suis; Mod ini meningkatkan kebolehkerjaan, kesesuaian dan skalabilitas kod dengan menukar logik bersyarat ke dalam polimorfisme dan kombinasi, dengan itu membina lebih banyak aplikasi PHP yang fleksibel.
Apabila membina aplikasi PHP yang fleksibel dan boleh dipelihara, bergantung semata-mata pada pernyataan asas if-else
dengan cepat boleh membawa kepada kod yang tegar dan keras. Corak bersyarat lanjutan membolehkan pemaju menulis logik yang lebih dinamik, berskala, dan boleh dibaca. Corak -corak ini melampaui cawangan mudah dan merangkumi prinsip -prinsip reka bentuk yang menggalakkan pemisahan kebimbangan, kesesuaian, dan lanjutan.

Berikut adalah beberapa corak bersyarat lanjutan yang boleh anda gunakan untuk menjadikan aplikasi PHP anda lebih mudah disesuaikan.
1. Corak Strategi: Gantikan logik bersyarat dengan tingkah laku yang boleh ditukar ganti
Daripada menggunakan switch
panjang atau rantai if-elseif
untuk menentukan tingkah laku, merangkum setiap variasi ke dalam kelasnya sendiri menggunakan corak strategi.

Contoh: Pemprosesan pembayaran
Interface PaymentProcessor { Proses Fungsi Awam (Float $ Amaun): BOOL; } Kelas CreditCardProcessor Melaksanakan PEMBAYARAN PEMBAYARAN { Proses Fungsi Awam (Float $ Amaun): Bool { // Proses kad kredit kembali benar; } } Kelas PayPalProcessor Melaksanakan PEMBAYARAN PEMBAYARAN { Proses Fungsi Awam (Float $ Amaun): Bool { // Proses melalui PayPal kembali benar; } } PEMBAYARAN KELAS { Pemproses PaymentProcessor $ Private; Fungsi Awam SetProcessor (PEMPERSIHIAN PEMBAYARAN $ Pemproses): Kekosongan { $ this-> pemproses = $ pemproses; } Fungsi Awam Jalankan (Float $ Amaun): Bool { kembali $ this-> processor-> process ($ amaun); } }
Mengapa lebih baik:

- Tiada syarat yang diperlukan semasa memilih logik
- Mudah untuk menambah kaedah pembayaran baru
- Menggalakkan suntikan dan ujian ketergantungan
Gunakan ini apabila:
- Anda mempunyai pelbagai algoritma untuk tugas yang sama
- Perubahan tingkah laku berdasarkan konteks atau konfigurasi
2. Null Object Corak: Hilangkan pemeriksaan null
Daripada penyebaran if ($object !== null)
cek, gunakan objek null yang melaksanakan antara muka yang sama tetapi tidak melakukan apa -apa.
Logger antara muka { log fungsi awam (rentetan $ mesej); } Kelas FileLogger Melaksanakan Logger { log fungsi awam (rentetan $ mesej) { file_put_contents ('app.log', $ mesej. php_eol, file_append); } } Kelas Nulllogger melaksanakan Logger { log fungsi awam (rentetan $ mesej) { // buat apa -apa } } Kelas Pengguna Kelas { Logger peribadi $ logger; Fungsi awam __Construct (logger $ logger = null) { $ this-> logger = $ logger ?? baru nulllogger (); // Elakkan pemeriksaan null } Daftar Fungsi Awam (String $ E -mel) { // tidak perlu memeriksa sama ada logger adalah batal $ this-> logger-> log ("pengguna berdaftar: $ e-mel"); } }
Manfaat: Kod bersih, lebih sedikit keadaan mempertahankan.
3. Corak Negeri: Biarkan objek mengubah tingkah laku berdasarkan keadaan dalaman
Apabila tingkah laku objek berubah secara drastik berdasarkan keadaannya, elakkan keadaan seperti if ($status === 'active')
dengan mengeksport logik keadaan.
Antara muka Orderstate { Kapal Fungsi Awam (OrderContext $ Order); Batalkan fungsi awam (OrderContext $ order); } kelas yang belum selesai melaksanakan Orderstate { Kapal Fungsi Awam (OrderContext $ Order) { / * tidak dibenarkan * /} Fungsi awam Batal (OrderContext $ order) {$ order-> setState (new CancelledState ()); } } Kelas ShippedState melaksanakan Orderstate { kapal fungsi awam (orderContext $ order) { / * sudah dihantar * /} Fungsi awam Batal (orderContext $ order) { / * tidak dapat membatalkan * /} } Kelas OrderContext { Orderstate swasta $ state; fungsi awam __construct () { $ this-> state = new IningState (); } Fungsi Awam SetState (Orderstate $ State) { $ this-> state = $ state; } kapal fungsi awam () {$ this-> state-> ship ($ this); } fungsi awam membatalkan () {$ this-> state-> membatalkan ($ ini); } }
Ini menghilangkan keadaan seperti:
jika ($ this-> status === 'menunggu') { $ this-> status = 'dihantar'; }
Sebaliknya, tingkah laku diwakilkan ke objek keadaan semasa.
4. Corak Spesifikasi: Tuliskan Peraturan Perniagaan Kompleks
Gunakan logik Boolean melalui objek untuk mewakili peraturan perniagaan. Ini amat berguna untuk pengesahan atau penapisan.
spesifikasi antara muka { fungsi awam issatisfiedby ($ calon): bool; Fungsi Awam dan (Spesifikasi $ Lain): Spesifikasi; fungsi awam atau (spesifikasi $ lain): spesifikasi; fungsi awam tidak (): spesifikasi; } Kelas Agespecification Melaksanakan Spesifikasi { persendirian int $ minage; Fungsi Awam __Construct (int $ minage) { $ this-> minage = $ minage; } Fungsi Awam IssatisFiedBy ($ calon): Bool { kembali $ calon-> umur> = $ this-> minage; } Fungsi Awam dan (Spesifikasi $ Lain): Spesifikasi { Kembalikan dan spesifikasi baru ($ ini, $ yang lain); } // ... sama untuk atau (), tidak () }
Sekarang anda boleh menyusun peraturan:
$ canvote = (Agespecification baru (18))-> dan (Kewarganegaraan Kewarganegaraan Baru ('US')); jika ($ canvote-> issatisfiedBy ($ user)) {...}
Ini menggantikan keadaan bersarang kompleks dengan objek peraturan yang boleh dibaca dan boleh diguna semula.
5. Corak Perintah dengan Pengawal: Pelaksanaan bersyarat tanpa IFS
Campurkan corak arahan dengan prasyarat (pengawal) untuk mengawal aliran pelaksanaan.
Perintah antara muka { fungsi awam canExecute (): bool; fungsi awam melaksanakan (); } Kelas DeleteacCountCommand melaksanakan arahan { Pengguna Swasta $ Pengguna; Fungsi Awam __Construct (pengguna $ pengguna) { $ this-> user = $ user; } fungsi awam canExecute (): bool { kembali $ this-> user-> isVerified () &&! $ this-> user-> hastiveSubscriptions (); } fungsi awam melaksanakan () { jika (! $ this-> canExecute ()) { membuang RuntimeException baru ("tidak dapat melaksanakan perintah"); } // melaksanakan penghapusan } }
Kemudian proses arahan secara amnya:
foreach ($ perintah sebagai $ cmd) { jika ($ cmd-> canExecute ()) { $ cmd-> Execute (); } }
Ini memusatkan logik bersyarat dan menjadikan saluran perintah mudah dikendalikan.
6. Gunakan penghantaran berasaskan kelas dan bukannya menukar pernyataan
Bukannya:
suis (type $) { kes 'pdf': kembali pdfexporter baru (); kes 'csv': kembali csvexporter baru (); // ... }
Gunakan peta jenis ke kelas:
Ekspor Kelas { array peribadi $ peta = [ 'pdf' => pdfexporter :: kelas, 'csv' => csvexporter :: kelas, ]; Buat Fungsi Awam (String $ Type): Pengeksport { jika (! isset ($ this-> map [$ type])) { membuang InvalidArgumentException baru ("Jenis Tidak Diketahui: $ Jenis"); } kembali baru $ this-> map [$ type] (); } }
Lebih baik: Gunakan bekas DI untuk menyelesaikannya secara dinamik.
Pemikiran terakhir
Corak bersyarat lanjutan membantu anda:
- Kurangkan duplikasi kod
- Meningkatkan kebolehlihatan
- Menjadikan sistem lebih mudah untuk dilanjutkan
- Elakkan kerumitan bersarang dan siklomatik yang mendalam
Daripada bertanya "Apa yang perlu saya lakukan seterusnya?" Dalam keadaan, tanya:
- Bolehkah ini menjadi objek?
- Bolehkah ini disuntik?
- Bolehkah ini disusun?
Dengan menggantikan keadaan dengan polimorfisme dan komposisi, anda membina sistem yang lebih mudah untuk membuat alasan dan berkembang dari masa ke masa.
Pada asasnya, jika anda menulis if
pernyataan untuk menentukan apa jenis perkara yang perlu dilakukan - mungkin masa untuk menggunakan corak.
Atas ialah kandungan terperinci Corak bersyarat lanjutan untuk membina aplikasi PHP yang fleksibel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Pernyataan IF-ELSE PHP adalah alat teras untuk melaksanakan kawalan dinamik program. 1. Struktur IF-ELSE asas menyokong membuat keputusan binari dan melaksanakan blok kod yang berlainan mengikut keadaan yang benar atau palsu; 2. Gunakan elseif untuk menilai secara urutan dalam pelbagai keadaan, dan hentikan pemeriksaan berikutnya apabila keadaan tertentu adalah benar; 3. 4. Elakkan penyalahgunaan operasi tugasan dalam keadaan, dan == atau === untuk perbandingan; 5. Walaupun bersarang jika pernyataan berkuasa, mereka mudah untuk mengurangkan kebolehbacaan, adalah disyorkan untuk menggunakan pulangan awal untuk mengurangkan bersarang; 6. Operator Ternary (? :) sesuai untuk tugasan bersyarat yang mudah, dan anda perlu memberi perhatian kepada kebolehbacaan apabila menggunakan rantai; 7. Pelbagai

Menggunakan ... elseinsideloopsenablesdynamiccontrolflowbyallowingrealreal-timedecisionsdingeachiterationbasedonchangingconditions.2.itsupportsconditionalprocessing, SuchIsdistinguishingEvenandoddnumbersinalist, ByExecutingDifferentcathsfordiffordfordfordford.

CheckForemptyInputusingifnotuser_nametodisplayanerrorandpreventdownstreamissues.2.validatedatypeswithifage_input.isdigit () beforeconvertingandchecklogicalestoavoidcrashes

fungsi lain dan lain -lain pada dasarnya sama dalam PHP, tetapi elseif harus lebih disukai dalam penggunaan sebenar. ① Elseif adalah struktur bahasa tunggal, sementara elseif dihuraikan ke dalam dua kenyataan bebas. Menggunakan Elseif dalam sintaks alternatif (seperti: dan endif) akan membawa kepada kesilapan parsing; ② Walaupun piawaian pengekodan PSR-12 tidak melarang lain secara jelas, penggunaan lain dalam contohnya bersatu, mewujudkan kaedah penulisan sebagai standard; ③ Elseif lebih baik dalam prestasi, kebolehbacaan dan konsistensi, dan secara automatik diformat oleh alat arus perdana; ④ Oleh itu, elseif harus digunakan untuk mengelakkan masalah yang berpotensi dan mengekalkan gaya kod bersatu. Kesimpulan terakhir ialah: Elseif harus selalu digunakan.

Gunakan mod dasar untuk menggantikan logik bersyarat dengan tingkah laku yang boleh ditukar ganti; 2. Gunakan mod objek kosong untuk menghapuskan pemeriksaan nilai null; 3. Gunakan mod keadaan untuk membiarkan objek mengubah tingkah laku mengikut keadaan dalaman; 4. Menggabungkan peraturan perniagaan yang kompleks melalui mod spesifikasi; 5. Menggabungkan mod arahan dan pengawal untuk mencapai kawalan pelaksanaan tanpa syarat; 6. Gunakan pengedaran berasaskan kelas untuk menggantikan pernyataan suis; Mod ini meningkatkan kebolehkerjaan, kesesuaian dan skalabilitas kod dengan menukar logik bersyarat ke dalam polimorfisme dan gabungan, dengan itu membina aplikasi PHP yang lebih fleksibel.

Menggunakan === bukannya == adalah kunci untuk mengelakkan risiko penukaran jenis dalam PHP, kerana == akan membuat perbandingan longgar, mengakibatkan kesilapan seperti '0' == 0 atau StrPOS kembali 0, menyebabkan kelemahan keselamatan dan pepijat logik. === menghalang masalah tersebut dengan membandingkan nilai dan jenis ketat. Oleh itu, === harus digunakan secara lalai, dan secara jelas menukarkan jenis apabila perlu, dan pada masa yang sama, menggabungkan pengisytiharan (strict_types = 1) untuk meningkatkan keselamatan jenis.

Ekspresi perlawanan adalah lebih baik daripada rantai lainf kerana sintaks ringkas mereka, perbandingan ketat, nilai pulangan ekspresi, dan dapat memastikan integriti melalui lalai; 2. Berkenaan dengan peta rentetan atau penghitungan kepada operasi, seperti memilih pemproses berdasarkan keadaan; 3. Menggabungkan penghitungan dengan Php8.1 boleh mencapai peruntukan kebenaran jenis-selamat; 4. Menyokong pemadanan multi-nilai cawangan tunggal, seperti jenis mime yang berbeza yang diklasifikasikan ke dalam kategori yang sama; 5. Pulangan penutupan untuk melambatkan logik pelaksanaan; 6. Keterbatasan termasuk hanya menyokong perbandingan nilai yang sama, tidak ada mekanisme jatuh, dan tidak menggunakan keadaan kompleks; 7. Amalan terbaik termasuk sentiasa menambah cawangan lalai, menggabungkan pulangan awal, untuk konfigurasi atau pemetaan penghalaan, dan membuang pengecualian apabila input tidak sah tidak berkesan untuk segera kehilangan

SirkuitevaluattionisapowerfeatureinprogramminglanguagePython, JavaScript, C, danJavatHatenHancesCodeSafety, kecekapan, dan pembacaan
