Bolehkah Fungsi Bersarang PHP Dipanggil di Luar Skop Terlampirnya?

DDD
Lepaskan: 2024-10-29 01:05:29
asal
492 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Output:

test
test
Salin selepas log masuk

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!

sumber:php.cn
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!