Analisis ralat dan pengecualian dalam PHP7 bersama-sama

藏色散人
Lepaskan: 2023-02-18 08:38:01
ke hadapan
2187 orang telah melayarinya

Disyorkan: "Tutorial PHP7"

Sebab mengapa bahasa PHP adalah mudah Salah satu daripadanya ialah mekanisme pengendalian ralat PHP Apabila bahasa PHP menjadi lebih moden, pengecualian juga muncul. Catatan blog ini hanya bercakap tentang ralat dan pengecualian untuk memudahkan pemahaman sistem , jadi adalah penting untuk mempelajari bahasa dan memahami mekanisme pengecualian

Apakah ralat
Apabila bahasa PHP menghadapi situasi yang tidak normal (seperti sambungan pangkalan data (atau fungsi. parameter dilalui secara salah), beberapa ralat akan dilaporkan Ralat boleh dibahagikan kepada banyak jenis Kecuali untuk ralat E_ERROR dan E_CORE_ERROR, ralat lain tidak akan menamatkan program
Sebab mengapa PHP membuat orang berasa mudah ialah program tidak akan melaporkan ralat dengan kerap, memberikan ilusi kepada orang ramai tentang penulisan yang lancar dan mudah
Itulah sebabnya ketelitian dan ketepatan program PHP adalah lebih teruk. Contohnya, apabila pertanyaan mysql_fetch_array menemui ralat rangkaian dan mengembalikan FALSE ( Program tidak ditamatkan berjalan), jika atur cara memanggil berpendapat bahawa pertanyaan tidak mempunyai data yang sepadan, maka program itu pada asasnya salah.
Kita boleh memilih jenis ralat yang hendak dilaporkan melalui arahan error_reporting dalam php.ini atau secara dinamik memanggil fungsi error_reporting() Perintah display_errors boleh mengawal sama ada ralat dikeluarkan dalam talian Perintah error_log boleh mengawal output ralat ke log

Cara menggunakan ralat dengan betul <.>Sama ada fungsi sistem atau tersuai Jika fungsi menghadapi ralat secara dalaman, bagaimanakah ia memberitahu pemanggil ia biasanya ditunjukkan oleh fungsi yang mengembalikan TRUE atau FALSE Kaedah pemprosesan ini mempunyai beberapa kelemahan:
● Pemanggil hanya mengetahui bahawa ralat telah berlaku, tetapi yang dikembalikan Terdapat terlalu sedikit maklumat ralat dan kekurangan penerangan tentang jenis ralat
● Logik pemprosesan program dan pengendalian ralat bercampur-campur dan kod yang dijana akan menjadi sangat tidak jelas.
Petua kecil: fungsi error_get_last() akan mengembalikan ralat terbaharu Sebab khusus.

Amalan terbaik:● fungsi set_error_handler() untuk mengehoskan semua ralat.
● fungsi trigger_error() boleh mencetuskan ralat tersuai dan boleh digunakan Gantikan pernyataan pulangan dalam fungsi
● Output semua ralat pada log dan tentukan jenis ralat
● Paparkan ralat kepada pengguna, seperti sebagai mengembalikan ralat kepada pengguna dengan cara yang lebih mesra
● Pengeluaran Perintah display_errors harus dimatikan dalam persekitaran dan dihidupkan dalam persekitaran pembangunan
Rangka kerja PHP lama Codeigniter boleh belajar daripada cara ia mengendalikan ralat

`function _error_handler($severity, $message, $filepath, $line)
{
    $is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity);
    //输出500错误HTTP状态码
    if ($is_error) {
        set_status_header(500);
    }
    //对于不需要处理的错误则直接中断
    if (($severity & error_reporting()) !== $severity) {
        return;
    }
    //将所有的错误记录到日志中
    $_error =& load_class('Exceptions', 'core');
    $_error->log_exception($severity, $message, $filepath, $line);
    //友好的输出所有错误
    if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
        $_error->show_php_error($severity, $message, $filepath, $line);
    }
    //假如致命错误则直接退出
    if ($is_error) {
        exit(1);   
    }
}
set_error_handler('_error_handler');`
Salin selepas log masuk

Apakah pengecualianPengecualian juga Ralat mempunyai ciri berikut:
● Pengecualian boleh disesuaikan dengan pelbagai jenis pengecualian, dan anda boleh juga memanjangkannya
● Tindakan yang paling biasa untuk pengecualian ialah menangkapnya, supaya pembangun boleh memproses ralat susulan Contohnya, anda boleh mengembalikan gesaan mesra kepada pengguna berdasarkan konteks pengecualian teruskan membuang pengecualian dan biarkan program huluan mengendalikannya. Jika pengecualian masih tidak ditangkap, program akan ditamatkan secara langsung
● Satu lagi tindakan pengecualian adalah untuk menulis logik perniagaan melalui fungsi dan menghadapi situasi yang tidak dijangka , anda boleh terus membuang pengecualian
● Pengecualian boleh ditangkap lapisan demi lapisan oleh kod Jika program paling luar tidak Jika ditangkap, kod akan ditamatkan terus
● Jika pengecualian dalam PHP tidak dapat ditangkap. , ia akan ditulis pada log ralat sistem sebagai ralat maut
Mari kita jelaskan melalui kod intuitif:

`function inverse($x)
{
    if ($x < 10) {
        throw new Exception(&#39;x<10&#39;);
    } elseif ($x >= 10 and $x < 100) {
        throw new LogicException(&#39;x>=10 and x<100&#39;);
    }
    return $x;
}
try {
    echo inverse(2)."\n";
} catch (LogicException $e) {
    echo &#39;Caught LogicException: &#39;, $e->getMessage(), "\n";
} catch (Exception $e) {
    echo 'Caught Exception: ', $e->getMessage(), "\n";
    throw $e;
}`
Salin selepas log masuk

Amalan terbaik untuk pengecualian● Pengecualian boleh membuat kod lebih jelas dan membolehkan pembangun menumpukan pada menulis logik perniagaan.
● Membina pengecualian berskala adalah sangat teknikal Adakah pengecualian SPL tidak mencukupi?
● Pengecualian penangkapan seharusnya hanya menangkap pengecualian yang boleh dikendalikan oleh. lapisan ini dan biarkan kod huluan mengendalikan pengecualian yang tidak boleh dikendalikan.

Pengecualian dalam PHP7 PHP7 menggalakkan penggunaan pengecualian untuk menggantikan ralat, tetapi adalah mustahil untuk membatalkan mekanisme pengendalian ralat sekaligus bahawa pengecualian ini selari dengan Pengecualian
Apabila mod ketat dihidupkan, banyak ralat dalam PHP7 dilemparkan oleh pengecualian Ralat Dengan cara ini, pengecualian boleh digunakan secara seragam .


● ErrorException.
ErrorException mewarisi daripada Exception.

Kami boleh menukar semua ralat kepada ErrorException melalui fungsi set_error_handler() Dengan cara ini, pengecualian boleh digunakan dengan senang hati dan seragam.
`declare (strict_types = 1);
function add(int $a, int $b)
{
    return $a + $b;
}
try {
    echo add("3", "4");
}
catch (TypeError $e) { //TypeError继承自Error
    echo $e->getMessage();
}`
Salin selepas log masuk
Di atas adalah kandungan terperinci tentang ralat memahami secara sistematik. dan pengecualian dalam PHP saya harap ia akan membantu anda.

Baca teks asal: Pemahaman sistematik tentang ralat dan pengecualian dalam PHP

Atas ialah kandungan terperinci Analisis ralat dan pengecualian dalam PHP7 bersama-sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!