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)

Topik panas

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Tostaycurrentwithphpdevelopmentsandbestpractices, followeyNewsssourcesLikePhp.netandphpweekly, engageWithCommunitiesonforumsandconference, keeptoolingupdatedandgraduallyAdoptNewFeatures, dan readribcoursourcourceSource

Phpbecamepopularforwebdevelopmentduetoitseaseoflearning, seamlessintegrationwithhtml, widespreadhostingsupport, andalargeecosystemincludingframeworkslikelaravelandcmsplatformsLikeWordPress.itexcelsinhandessubmissions

TosetTheRightTimeZoneinPhp, USEDATE_DEFAULT_TIMEZONE_SET () functionAtthestArtAfyourscriptwithavalididentifiersuchas'america/new_york'.1.usedate_default_timeSet ()
