Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat \"Pengecualian: Pensirian \'Penutupan\' Tidak Dibenarkan\" Menggunakan Penutupan dalam Kaedah Ujian?

Bagaimana untuk Menyelesaikan Ralat \"Pengecualian: Pensirian \'Penutupan\' Tidak Dibenarkan\" Menggunakan Penutupan dalam Kaedah Ujian?

Susan Sarandon
Susan Sarandonasal
2024-10-24 01:28:02437semak imbas

How to Resolve

Pengecualian: Pensirian 'Penutupan' Tidak Dibenarkan

Apabila cuba menggunakan penutupan dalam kaedah ujian, "Pengecualian: Pensirian ' Penutupan' tidak dibenarkan" ralat mungkin berlaku.

Masalah

Serpihan kod di bawah menggunakan penutupan untuk menentukan laluan fail tersuai untuk menyimpan e-mel:

<code class="php">protected function _initMailer() {
    ...
    elseif ('testing' === APPLICATION_ENV) {
        // ...
        $callback = function()
        {
            return 'ZendMail_' . microtime(true) .'.tmp';
        };
        // ...
    }</code>

Resolusi

Penyelesaian 1: Gantikan Penutupan dengan Fungsi Biasa

Ganti penutupan dengan fungsi biasa:

<code class="php">protected function _initMailer() {
    ...
    elseif ('testing' === APPLICATION_ENV) {
        // ...
        function emailCallback() {
            return 'ZendMail_' . microtime(true) . '.tmp';
        }
        $callback = "emailCallback";
        // ...
    }</code>

Penyelesaian 2: Gunakan Pembolehubah Tatasusunan untuk Panggilan Kaedah Tidak Langsung

Gunakan pembolehubah tatasusunan untuk memanggil kaedah secara tidak langsung:

<code class="php">protected function _initMailer() {
    ...
    elseif ('testing' === APPLICATION_ENV) {
        // ...
        $callback = array($this, "aMethodInYourClass");
        // ...
    }</code>

Ini membolehkan anda untuk tentukan kaedah dalam kelas dan hantarkannya ke panggil balik menggunakan tatasusunan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \"Pengecualian: Pensirian \'Penutupan\' Tidak Dibenarkan\" Menggunakan Penutupan dalam Kaedah Ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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