Ralat mengendalikan pengubahsuaian mekanisme


1 Kini terdapat dua kelas pengecualian: Pengecualian dan Ralat

PHP7 kini mempunyai dua kelas pengecualian, Pengecualian dan Ralat. Kedua-dua kelas melaksanakan antara muka baharu: Throwable. Dalam kod pengendalian pengecualian anda, petunjuk jenis mungkin perlu dilaraskan.

2. Beberapa ralat maut dan ralat maut boleh pulih ditukar untuk membuang objek Ralat.

Sesetengah ralat maut dan ralat maut boleh pulih kini dilaporkan sebagai objek Ralat. Objek ralat adalah bebas daripada Pengecualian, dan ia tidak boleh ditangkap dengan cubaan/tangkapan biasa. Nota editor: Anda perlu mendaftarkan fungsi pengendalian ralat, sila rujuk RFC di bawah.

Ralat maut boleh pulih ini yang telah bertukar menjadi pengecualian tidak lagi boleh diabaikan secara senyap melalui pengendali ralat. Khususnya, ralat pembayang jenis tidak boleh diabaikan.

3. Ralat sintaks akan membuang objek ParseError

Ralat sintaks akan membuang objek ParseError, yang mewarisi daripada objek Ralat. Semasa mengendalikan eval() sebelum ini, selain menyemak nilai pulangan atau error_get_last() untuk kod yang berpotensi ralat, anda juga harus menangkap objek ParseError.

4. Kaedah pembinaan objek dalaman akan sentiasa membuang pengecualian jika gagal. Sesetengah pembina sebelumnya akan mengembalikan NULL atau objek yang tidak boleh digunakan.

5. Tahap beberapa ralat E_STRICT telah dilaraskan.


Pengendalian Ralat PHP 7

PHP 7 mengubah cara kebanyakan ralat dilaporkan. Tidak seperti mekanisme pelaporan ralat tradisional PHP 5, kebanyakan ralat kini dilemparkan sebagai pengecualian Ralat.

Pengecualian Ralat jenis ini boleh ditangkap dengan cuba / tangkap blok seperti pengecualian biasa. Jika tiada blok cuba / tangkap yang sepadan, Fungsi pengendalian pengecualian (didaftarkan oleh set_exception_handler()) dipanggil untuk diproses. Jika pengendali pengecualian belum didaftarkan, ia dikendalikan dengan cara tradisional: ia dilaporkan sebagai Ralat Maut.

Kelas ralat tidak dilanjutkan daripada kelas Pengecualian, jadi kod seperti tangkapan (Exception $e) { ... } tidak boleh ditangkap kepada Ralat. Anda boleh menggunakan kod seperti tangkapan (Ralat $e) { ... } atau dengan mendaftarkan fungsi pengendalian pengecualian ( set_exception_handler()) untuk menangkap Ralat.

Hierarki pengecualian ralat


1.Ralat ​

    AritmetikRalat OnAssertionerror OnDivisionbyzeroerror AtauPARSEERROR OrTyperror ​

  • 2.Pengecualian

  • ...


  • contoh
    Pengecualian PHP 7
    1458887252-2773-exception-hiearchy.jpg
    Pengecualian PHP 7 digunakan untuk Kurangkan keserasian dan peningkatan fungsi assert() lama. Ia membolehkan penegasan kos sifar dalam persekitaran pengeluaran dan menyediakan keupayaan untuk membuang pengecualian dan ralat tersuai.
    Versi lama API akan terus dikekalkan untuk tujuan keserasian, assert() kini merupakan binaan bahasa, yang membolehkan parameter pertama menjadi ungkapan, bukan sekadar rentetan untuk dikira atau boolean untuk diuji .
    tegaskan() konfigurasi

    Item konfigurasiNilai lalai

    Nilai pilihan

    1 penegasan

    1 - Jana dan laksanakan kod (mod pembangunan )

    0 - Jana kod, tetapi langkau apabila melaksanakan

    -1 - Jangan jana kod (persekitaran pengeluaran)


    • 1 - Dilemparkan apabila penegasan gagal, objek pengecualian boleh dilemparkan, atau contoh objek AssertionError dilemparkan jika tiada pengecualian disediakan.

    • 0 - Gunakan atau jana Boleh Lempar, cuma jana amaran berdasarkan objek dan bukannya membaling objek (serasi dengan PHP 5)

    parameter

    penegasan

    penegasan. Dalam PHP 5, rentetan untuk pelaksanaan atau boolean untuk ujian. Dalam PHP 7, ini boleh menjadi ungkapan yang mengembalikan sebarang nilai, dan hasilnya akan digunakan untuk menunjukkan sama ada pernyataan itu berjaya.

    penerangan

    Jika penegasan gagal, penerangan pilihan akan disertakan dalam mesej kegagalan.

    exception

    Dalam PHP 7, parameter kedua boleh menjadi objek Boleh Lempar dan bukannya rentetan, yang akan dilemparkan jika penegasan gagal dan assert.exception didayakan. Contoh

    <?php
    class MathOperations 
    {
       protected $n = 10;
       // 求余数运算,除数为 0,抛出异常
       public function doOperation(): string
       {
          try {
             $value = $this->n % 0;
             return $value;
          } catch (DivisionByZeroError $e) {
             return $e->getMessage();
          }
       }
    }
    $mathOperationsObj = new MathOperations();
    print($mathOperationsObj->doOperation());
    ?>
    Hasil keluaran pelaksanaan program di atas ialah:
    Modulo by zero