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

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.

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)

Masalah dan penyelesaian biasa untuk skop pembolehubah PHP termasuk: 1. Pembolehubah global tidak dapat diakses dalam fungsi, dan ia perlu diluluskan menggunakan kata kunci atau parameter global; 2. Pembolehubah statik diisytiharkan dengan statik, dan ia hanya dimulakan sekali dan nilai dikekalkan antara pelbagai panggilan; 3. Pembolehubah hyperglobal seperti $ _get dan $ _post boleh digunakan secara langsung dalam mana -mana skop, tetapi anda perlu memberi perhatian kepada penapisan yang selamat; 4. Fungsi Anonymous perlu memperkenalkan pembolehubah skop induk melalui kata kunci penggunaan, dan apabila mengubah suai pembolehubah luaran, anda perlu lulus rujukan. Menguasai peraturan ini boleh membantu mengelakkan kesilapan dan meningkatkan kestabilan kod.

Untuk mengendalikan muat naik fail PHP dengan selamat, anda perlu mengesahkan sumber dan jenis, mengawal nama fail dan laluan, menetapkan sekatan pelayan, dan memproses fail media dua kali. 1. Sahkan sumber muat naik untuk mengelakkan CSRF melalui token dan mengesan jenis mime sebenar melalui finfo_file menggunakan kawalan putih; 2. Namakan semula fail ke rentetan rawak dan tentukan pelanjutan untuk menyimpannya dalam direktori bukan web mengikut jenis pengesanan; 3. Konfigurasi PHP mengehadkan saiz muat naik dan direktori sementara Nginx/Apache melarang akses ke direktori muat naik; 4. Perpustakaan GD menyambung semula gambar -gambar untuk membersihkan data yang berpotensi.

Terdapat tiga kaedah umum untuk kod komen PHP: 1. Use // atau # untuk menyekat satu baris kod, dan disyorkan untuk menggunakan //; 2. Gunakan /.../ untuk membungkus blok kod dengan pelbagai baris, yang tidak boleh bersarang tetapi boleh diseberang; 3. Komen -komen kemahiran gabungan seperti menggunakan / jika () {} / untuk mengawal blok logik, atau untuk meningkatkan kecekapan dengan kunci pintasan editor, anda harus memberi perhatian kepada simbol penutupan dan mengelakkan bersarang apabila menggunakannya.

Ageneratorinphpisamemory-efficientwaytoiterateOverlargedatasetsbyieldingvaluesonateatimeNsteadofreturningthemallatonce.1.GeneratorSuseTheyEldeyWorderWorderToProducevaluuesondemand,

Kunci untuk menulis komen PHP adalah untuk menjelaskan tujuan dan spesifikasi. Komen harus menjelaskan "mengapa" dan bukannya "apa yang dilakukan", mengelakkan redundansi atau terlalu kesederhanaan. 1. Gunakan format bersatu, seperti docblock (/*/) untuk deskripsi kelas dan kaedah untuk meningkatkan keserasian dan keserasian alat; 2. Menekankan sebab -sebab di sebalik logik, seperti mengapa JS melompat perlu dikeluarkan secara manual; 3. Tambahkan gambaran keseluruhan gambaran sebelum kod kompleks, terangkan proses dalam langkah -langkah, dan membantu memahami idea keseluruhan; 4. Gunakan Todo dan Fixme secara rasional untuk menandakan item dan masalah untuk memudahkan penjejakan dan kerjasama berikutnya. Anotasi yang baik dapat mengurangkan kos komunikasi dan meningkatkan kecekapan penyelenggaraan kod.

Toinstallphpquickly, usexampponwindowsorhomeBrewonmacos.1.onwindows, downloadandInstallxampp, selectcomponents, startapache, andplaceFilesinhtdocs.2.alternative, secara manualstallphpfromphp.netandsheBerver.3

Dalam PHP, anda boleh menggunakan kurungan persegi atau pendakap keriting untuk mendapatkan aksara indeks spesifik rentetan, tetapi kurungan persegi disyorkan; Indeks bermula dari 0, dan akses di luar julat mengembalikan nilai null dan tidak dapat diberikan nilai; MB_SUBSTR dikehendaki mengendalikan watak multi-bait. Sebagai contoh: $ str = "hello"; echo $ str [0]; output h; dan watak -watak Cina seperti MB_SUBSTR ($ str, 1,1) perlu mendapatkan hasil yang betul; Dalam aplikasi sebenar, panjang rentetan perlu diperiksa sebelum gelung, rentetan dinamik perlu disahkan untuk kesahihan, dan projek berbilang bahasa mengesyorkan menggunakan fungsi keselamatan multi-bait secara seragam.

Tolearnphpeffectively, startbysettingupalocalverenvironmentusingToolsLikexamppandaCodeDitorLikevscode.1) InstallXamppforapa Che, MySql, danPhp.2) UseAcodeeditorForsyntaxSupport.3) testyoursetupwithasimplephpfile.next, learnphpbasicsincludingvariables, ech
