PHP Master | Pengecualian yang luar biasa
mata teras
- Pengecualian PHP adalah kelas khas yang boleh dibuang dan ditangkap untuk menunjukkan peristiwa yang tidak dijangka. Tidak seperti kesilapan yang tidak dapat dipulihkan, pengecualian dimaksudkan untuk diproses oleh kod panggilan dan gelembung ke atas sepanjang rantaian pelaksanaan sehingga mereka ditangkap.
- Perbezaan antara kesilapan dan pengecualian PHP adalah bahawa kesilapan tidak dapat dipulihkan dan berlaku dalam gelung pelaksanaan utama, menunjukkan bahawa terdapat masalah dengan kestabilan kod atau persekitaran; gelung pelaksanaan, dan tidak bermakna sistem tidak stabil.
- Tidak semua situasi yang tidak berjaya memerlukan pengecualian untuk dibuang. Pengecualian harus dibuang hanya jika mereka benar -benar tidak dapat meneruskan pelaksanaan. Ini bermakna bahawa tindakan yang bukan operasi biasa atau standard, kelainan, menyimpang dari situasi yang normal dan dijangka.
- Toping A General
- bersamaan dengan mengatakan terdapat "masalah" dan kod itu tidak tahu apa yang sedang berlaku. Sebaliknya, pengecualian tersuai harus selalu dilemparkan untuk memaklumkan kod panggilan situasi semasa, dengan itu memberikan kawalan halus terhadap apa yang sedang berlaku.
Exception
Blok penangkapan global adalah tahap tertinggi blok penangkapan, dan semua pengecualian yang menggelegak ke tahap itu mesti ditangkap. Ia harus menjadi satu -satunya pengendali pengecualian umum dalam kod pengeluaran. Pengendali lain mestilah khusus dan terhad kepada pengecualian yang tahu bagaimana untuk mengendalikan dan bertanggungjawab.
akan dilaksanakan), dan kawalan akan dikembalikan ke pengendali pengecualian yang sepadan pertama (menangkap blok, pengendali pengecualian yang dikonfigurasikan atau Pengendali pengecualian yang disediakan oleh bahasa). Pelaksanaan kod berterusan dari sana hanya apabila pengecualian ditangkap. Artikel ini tidak bertujuan untuk menjelaskan pengecualian di peringkat kemasukan, tetapi untuk memberi nasihat tentang cara menggunakan pengecualian dengan lebih baik. Sekiranya anda tidak pernah menggunakan pengecualian sebelum ini, anda mungkin perlu berunding throw
Ralat
bukan pengecualian
Anda mungkin belajar tentang pengecualian, tetapi anda mungkin tertanya -tanya tentang perbezaan antara kesilapan PHP dan pengecualian (adat). Logik sebenarnya sangat mudah: ralat tidak dapat dipulihkan, berlaku dalam gelung pelaksanaan utama, dan menunjukkan kestabilan alam sekitar. Sebagai contoh, jika anda cuba mengakses nilai skalar sebagai array dan menaikkan E_NOTICE
, ini bermakna terdapat masalah dengan kod anda. Tidak ada jaminan bahawa pelaksanaan berterusan adalah selamat. Keadaan ini tidak dapat diperbetulkan semasa pelaksanaan. Jika T_IF
dicetuskan oleh E_PARSE
yang tidak dijangka yang ditemui oleh parser, anda akan memahami bagaimana ini mempengaruhi kestabilan perkara. Sebaliknya, pengecualian boleh diperolehi semula, boleh (dan biasanya) berlaku di luar gelung pelaksanaan utama dan tidak menunjukkan kestabilan sistem. Ia adalah komponen yang mengatakan, "Saya tidak dapat menyelesaikan permintaan anda dengan input yang diberikan, jadi anda boleh mengendalikan maklumat tersebut." Jadi ia tidak dapat menyelesaikan arahan yang diberikan dengan nilai semasa. Ini tidak bermakna persekitaran anda tidak stabil, ini hanya bermakna bahawa kod anda perlu menyesuaikan panjang nilai dengan padding atau memotong. Kod anda boleh menangkap pengecualian ini, mengemas kini nilai, dan cuba lagi. LengthException
tidak semua pengecualian adalah pengecualian
Ini adalah salah satu soalan yang paling sukar untuk dijawab: Apa sebenarnya pengecualian perlu dibuang? Sudah tentu, pengecualian anda mesti mematuhi tiga peraturan dalam perenggan sebelumnya. Membuang pengecualian ketika menghadapi ingatan yang rosak adalah amalan yang sangat buruk. Kod anda harus membuang ralat sebaliknya supaya PHP dapat membatalkan secepat mungkin, kerana persekitaran membuktikan tidak selamat untuk meneruskan pelaksanaan. Walau bagaimanapun, walaupun kesilapan tidak perlu, tiada pengecualian diperlukan untuk semua situasi yang tidak berjaya. Maksudnya: tidak semua situasi yang tidak berjaya adalah pengecualian. Perkataan "tidak normal" merujuk kepada tindakan yang bukan operasi biasa atau standard, dan kelainan yang menyimpang dari situasi yang normal dan dijangka. Seorang bekas rakan sekerja pernah memberitahu saya pada waktu makan malam bahawa perkhidmatan XML/RPC yang digunakan oleh syarikat mereka direka, tulang belakang semua operasi yang dihadapi awam. Arkitek kemudian belajar tentang pengecualian dan kemudahan mereka dalam menunjukkan keadaan yang tidak berjaya. Pilar ini menyediakan fungsi log masuk tunggal sebagai tambahan kepada ciri-ciri lain. Daripada mengakses pangkalan data secara langsung, aplikasi Web menanyakan perkhidmatan XML/RPC, yang kemudiannya bertindak balas berdasarkan kedai data berpusat yang berfungsi semua aplikasi web. Apabila kelayakan yang sah disediakan, status yang berjaya akan dikembalikan. Apabila masalah berlaku, pengecualian dilemparkan dan mesej dipaparkan menunjukkan sebab kegagalan. Mudah ditangkap, anda boleh memaparkan mesej kepada pengguna dengan mesej ralat yang mencolok dan berkilat. Tetapi pengguna menyediakan nama pengguna dan/atau kata laluan yang salah benar -benar menyimpang dari jangkaan? Dalam projek saya, pengguna yang saya kendalikan tidak sempurna, mereka akan menaip atau melupakan perkara. Mendapatkan kelayakan yang salah adalah sangat biasa, lebih biasa daripada kelayakan yang sah. Kelayakan pengesahan adalah tingkah laku yang dijangkakan untuk log masuk ke sistem, jadi dalam kes ini, perkhidmatan XML/RPC harus mengembalikan status yang menunjukkan sama ada pengesahan itu berjaya atau tidak. Walaupun kelayakan gagal, proses pengesahan itu sendiri masih berjaya dilaksanakan. Jika proses pengesahan tidak dilaksanakan dengan betul, terdapat masalah lain. Mungkin kedai data tidak boleh diakses, atau sesuatu yang lain. Ia sangat luar biasa untuk sistem log masuk yang tidak dapat disambungkan ke datastore mereka kerana ia tidak dapat berjalan tanpa datastores. Oleh itu, ini memerlukan membuang pengecualian. Nota: Sesetengah orang mungkin berpendapat bahawa sistem log masuk gagal menyambung ke kedai data adalah tanda bahawa persekitaran tidak stabil dan oleh itu harus menimbulkan kesilapan. Walau bagaimanapun, log masuk ke sistem tidak bertanggungjawab untuk menimbulkan ralat untuk penyimpanan data. Sebaliknya, jika penyambung penyimpanan data/pembungkus dianggap perlu, ralat perlu dibangkitkan. Secara umumnya, anda boleh memikirkan pengecualian sebagai situasi di mana pemaju perlu melangkah, melihat, dan mengendalikannya. Kod yang berlaku dengan senario pengecualian tidak dapat melakukan ini dengan sendirinya. Ini mungkin pemaju telah melihat kod dan cara mereka mengendalikannya adalah untuk membiarkannya berlaku apabila ia berlaku. Jangan mula menghantar e -mel kepada semua pengecualian ke pusat operasi rangkaian; Mengendalikan apa yang anda boleh dan harus mengendalikan dan pengecualian hanya dibuang jika ia benar -benar tidak dapat meneruskan pelaksanaan.
"Masalah"
Beberapa tahun yang lalu, ketika saya sedang mendaki melalui Eropah, saya tersandung pada pemandangan yang tidak dapat dilupakan di stesen kereta api di Greece. Salah satu kawasan loker kelihatan seperti bom meletup, dengan pintu tersebar di atas tanah, separuh tergantung pada engsel, atau dihancurkan. Saya kemudian mengetahui bahawa mereka telah mengeluarkan kawasan loker, tetapi perlu diperhatikan bagaimana mereka berkomunikasi kepada pelanggan bahawa kawasan ini telah dinyahaktifkan. Terdapat banyak pita di bahagian tengah, dengan sekeping kertas yang menampalnya dengan kata -kata "masalah". Secara teknikal, ini betul -betul betul. Terdapat jelas sesuatu yang salah dengan loker dan situasi itu ditangani dengan menyampaikannya kepada pelanggan. Anda mungkin merasa menarik, tetapi sebenarnya anda melihat ini sering dalam kod anda. Jika anda hanya membuang Exception
, anda pada dasarnya mengatakan "masalah" dan kod itu tidak tahu apa yang sedang berlaku. Walaupun Exception
adalah kelas asas untuk setiap pengecualian, anda boleh melanjutkannya dengan jenis anda sendiri. Pengumpulan pengecualian yang lebih luas boleh didapati di perpustakaan SPL, tetapi ini jauh dari had. Melihat kerangka PHP utama seperti Rangka Kerja Zend atau Symfony, anda akan mendapati bahawa mereka menggunakan pengecualian tersuai untuk hampir setiap situasi yang berbeza. Ia agak rumit untuk menulis semua fail ini supaya mereka boleh dimuatkan secara dinamik dan mengekalkan semua jenis yang berbeza, tetapi ini memberikan kawalan halus ke atas apa yang berlaku untuk rangka kerja dan pengguna rangka kerja itu. Jika anda hanya membuang Exception
, maka anda hanya boleh memastikan bahawa ada sesuatu yang salah dan anda mungkin juga berputus asa. Ini bermakna anda menggunakan pengecualian cara mereka adalah kesilapan, menggunakan blok penangkapan sebagai pengendali senyap, dan hanya melepaskan harapan bahawa seseorang dapat membetulkan keadaan ini dalam beberapa cara.
Global Capture
Jika ia adalah idea yang tidak baik untuk menggunakan pengecualian bukan adat dan menangkap semua pengecualian yang mungkin, maka mengapa bahasa itu membenarkan ini? Terdapat satu pengecualian kepada peraturan yang selalu menggunakan dan menangkap pengecualian khusus, iaitu peraturan penangkapan global. Blok penangkapan global adalah blok penangkapan peringkat tertinggi dan mesti menangkap semua pengecualian yang menggelegak ke tahap itu. PHP sendiri mengandungi A (adakah anda melihat "kesilapan maut: pengecualian yang tidak diketahui dalam ..." mesej?), Tetapi anda boleh mengatasinya dengan pengendali adat untuk berfungsi sebagai sandaran. Anda boleh menetapkan pengendali ini dengan fungsi set_exception_handler()
, jadi anda boleh melakukannya seperti yang anda suka dan menambah peraturan pada peraturan phpmd anda yang melarang garis seperti "catch (Exception $e) {
yang belum ditangkap. Pengendali lain mestilah khusus dan terhad kepada pengecualian yang tahu bagaimana untuk mengendalikan dan bertanggungjawab. Berhati -hati di sini, membiarkan pengecualian yang boleh dibelenggu sekali (dan kemudian membetulkannya dalam kod) pasti lebih baik daripada menangkap terlalu banyak dan bertindak sebagai pengendali senyap. Exception
Ringkasan Singkat Hanya menangkap pengecualian yang anda boleh dan harus mengendalikan. Ini akan menjadikan komponen anda kurang seperti kotak hitam (pengecualian adat) dan mengurangkan kemungkinan pemaju yang mengintegrasikan komponen anda mesti mengubah kod anda (jangan menangkap pengecualian yang tidak seharusnya). Kami sentiasa memberitahu pelanggan/pengurus kami untuk menjadi spesifik, tetapi kami juga harus khusus!
(gambar dari fotolia)
soalan yang sering ditanya mengenai pengendalian pengecualian php
- Apakah tujuan pengendalian pengecualian PHP?
- Bagaimanakah blok percubaan dalam kerja PHP?
- Apakah peranan akhirnya blok dalam pengendalian pengecualian PHP?
- Bagaimana untuk membuat pengecualian tersuai dalam PHP?
- Apakah perbezaan antara pengecualian dan kesilapan dalam PHP?
- Bagaimana untuk mengendalikan pelbagai pengecualian dalam PHP?
- Bolehkah saya membuang semula pengecualian dalam php?
Ya, anda boleh membuang semula pengecualian dalam PHP. Ini sangat berguna jika anda ingin mengendalikan pengecualian entah bagaimana tetapi ingin mempunyai tahap pengecualian yang lebih tinggi menangkapnya. Untuk melemparkan semula pengecualian, hanya gunakan pernyataan lemparan di blok tangkapan.
- Bagaimana untuk merakam pengecualian dalam PHP?
Dalam php, anda boleh log pengecualian dengan menggunakan fungsi error_log dalam blok tangkapan. Ini membolehkan anda log maklumat mengenai pengecualian, termasuk mesej dan jejak timbunannya, ke dalam fail log yang ditentukan.
- Apakah pdoException dalam php?
PDOException adalah pengecualian yang dilemparkan apabila ralat berlaku dalam operasi PDO. PDO (Objek Data PHP) adalah lapisan abstraksi pangkalan data yang menyediakan antara muka yang konsisten untuk mengakses pangkalan data dalam PHP. PDOException memberikan maklumat mengenai kesilapan, termasuk kod ralat SQLState dan mesej ralat untuk pemacu pangkalan data.
- Bagaimana untuk mengendalikan pengecualian yang tidak disengajakan dalam PHP?
Dalam PHP, anda boleh mengendalikan pengecualian yang tidak diketahui dengan menentukan fungsi pengendali pengecualian tersuai dan kemudian menetapkannya sebagai pengendali pengecualian lalai menggunakan fungsi set_exception_handler. Fungsi ini dipanggil setiap kali pengecualian yang tidak ditangkap oleh blok cubaan cuba dilemparkan.
Atas ialah kandungan terperinci PHP Master | Pengecualian yang luar biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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

Alipay Php ...

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Fungsi penghitungan dalam Php8.1 meningkatkan kejelasan dan jenis keselamatan kod dengan menentukan pemalar yang dinamakan. 1) Penghitungan boleh menjadi bilangan bulat, rentetan atau objek, meningkatkan kebolehbacaan kod dan keselamatan jenis. 2) Penghitungan adalah berdasarkan kelas dan menyokong ciri-ciri berorientasikan objek seperti traversal dan refleksi. 3) Penghitungan boleh digunakan untuk perbandingan dan tugasan untuk memastikan keselamatan jenis. 4) Penghitungan menyokong penambahan kaedah untuk melaksanakan logik kompleks. 5) Pemeriksaan jenis dan pengendalian ralat yang ketat boleh mengelakkan kesilapan biasa. 6) Penghitungan mengurangkan nilai sihir dan meningkatkan keupayaan, tetapi memberi perhatian kepada pengoptimuman prestasi.

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Menghantar data JSON menggunakan perpustakaan Curl PHP dalam pembangunan PHP, sering kali perlu berinteraksi dengan API luaran. Salah satu cara biasa ialah menggunakan perpustakaan curl untuk menghantar post ...

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.
