Cuba/Tangkap blok dalam PHP tidak dapat menangkap situasi pengecualian
P粉226413256
2023-08-22 15:19:37
<p>Saya cuba menjalankan contoh #1 ini, dari halaman ini: http://php.net/manual/en/language.exceptions.php</p>
<pre class="brush:php;toolbar:false;"><?php
fungsi songsang($x) {
jika (!$x) {
buang Exception baru('Bahagian dengan sifar.');
}
pulangkan 1/$x;
}
cuba {
echo songsang(5) "n";
echo songsang(0) "n";
} tangkapan (Pengecualian $e) {
echo 'Caught exception: ', $e->getMessage(), "n";
}
// Teruskan pelaksanaan
echo "Hello Worldn";
?></pra>
<p>Walau bagaimanapun, output yang saya perolehi tidak dijangka: </p>
<pre class="brush:php;toolbar:false;">0.2
Ralat maut: Pengecualian tidak ditangkap 'Pengecualian' dengan mesej 'Bahagian dengan sifar.'
inxxx:
7 Surih tindanan: #0 xxx(14): songsang(0) #1 {utama} dibuang dalam xxx pada baris 7</pre>
<p>Persekitaran pembangunan yang saya gunakan ialah <code>UniServer 3.5</code> dan <code>PHP 5.2.3</code></p>
Saya baru sahaja menghadapi masalah yang tepat ini, rasanya saya telah menyalin nama pengecualian tetapi ia tidak menangkapnya. Ternyata satu kesilapan bodoh di pihak saya, tetapi saya fikir saya akan menyiarkan situasi saya di sini sekiranya orang lain berada dalam situasi yang sama.
Pengecualian saya dipanggil A dalam ruang nama saya dan skrip dipanggil B dalam satu ruang nama. Masalahnya ialah saya mempunyai AMyException yang sama dengan (dalam PHP) BAMyException (kerana skrip saya dipanggil B dalam ruang nama!). Apa yang saya perlu lakukan ialah menambah garis miring ke belakang (atau apa sahaja namanya) sebelum nama pengecualian untuk membetulkannya supaya ia kelihatan seperti ini: AMyException