Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Fungsi Bersarang PHP Dipanggil di Luar Skop Terlampirnya?

Bolehkah Fungsi Bersarang PHP Dipanggil di Luar Skop Terlampirnya?

DDD
DDDasal
2024-10-29 01:05:29493semak imbas

Can PHP Nested Functions Be Called Outside Their Enclosing Scope?

Fungsi PHP Bersarang: Tujuan dan Penggunaan

Dalam bidang PHP, fungsi bersarang memperkenalkan elemen pengkapsulan dan organisasi kod. Walaupun mereka mungkin tidak berada di mana-mana seperti rakan JavaScript mereka, fungsi bersarang PHP mencari niche mereka dalam senario tertentu.

Pertimbangkan contoh ini:

<code class="php">function outer($msg)
{
    function inner($msg)
    {
        echo 'inner: ' . $msg . ' ';
    }

    echo 'outer: ' . $msg . ' ';
    inner($msg);
}

inner('test1'); // Fatal error: Call to undefined function inner()
outer('test2'); // outer: test2 inner: test2
inner('test3'); // inner: test3
outer('test4'); // Fatal error: Cannot redeclare inner()</code>

Seperti yang anda boleh perhatikan, apabila anda cuba untuk gunakan fungsi inner() terus di luar fungsi outer(), ia mengakibatkan ralat maut kerana ia terhad kepada skop fungsi outer(). Tingkah laku ini sejajar dengan konsep skop leksikal, di mana fungsi bersarang mewarisi skop fungsi lampirannya dan tidak boleh diakses dari luar skop tersebut.

Jika anda menggunakan PHP 5.3 atau lebih baru, anda boleh memanfaatkan fungsi tanpa nama untuk mencapai kelakuan seperti JavaScript:

<code class="php">function outer()
{
    $inner = function() {
        echo "test\n";
    };

    $inner();
}

outer();
outer();

inner(); // PHP Fatal error: Call to undefined function inner()
$inner(); // PHP Fatal error: Function name must be a string</code>

Output:

test
test

Dalam contoh ini, fungsi anonim $inner ditakrifkan dalam fungsi outer() dan mempunyai akses kepada skopnya. Walau bagaimanapun, ia tetap terhad kepada skop itu dan tidak boleh digunakan terus daripada skop global.

Atas ialah kandungan terperinci Bolehkah Fungsi Bersarang PHP Dipanggil di Luar Skop Terlampirnya?. 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
Artikel sebelumnya:Berapa Lama Sesi PHP Bertahan?Artikel seterusnya:Berapa Lama Sesi PHP Bertahan?