Tidak Dapat Mengakses Pembolehubah Global Fungsi Dalam: Penyelesaian dan Penjelasan
Apabila bekerja dengan PHP, anda mungkin menghadapi situasi di mana anda perlu mengakses pembolehubah global dari dalam fungsi. Walau bagaimanapun, jika anda tidak dapat berbuat demikian, ia boleh mengecewakan. Artikel ini menyediakan penyelesaian kepada masalah ini bersama-sama dengan penjelasan yang komprehensif.
Coretan kod di bawah menunjukkan isu biasa yang mungkin anda hadapi:
$sxml = new SimpleXMLElement('<somexml/>'); function foo(){ $child = $sxml->addChild('child'); } foo();
Dalam kod ini, anda cuba mengakses Pembolehubah $sxml di dalam fungsi foo(). Walau bagaimanapun, oleh kerana $sxml ditakrifkan di luar fungsi, ia dianggap pembolehubah global dan tidak boleh diakses secara langsung dalam foo().
Untuk menyelesaikan isu ini, anda mempunyai beberapa pilihan:
1. Lulus Pembolehubah sebagai Argumen:
Anda boleh menghantar pembolehubah $sxml sebagai argumen kepada fungsi foo():
$sxml = new SimpleXMLElement('<somexml/>'); function foo($sxml){ $child = $sxml->addChild('child'); } foo($sxml);
Pendekatan ini membolehkan anda mengakses $ pembolehubah sxml terus dalam foo().
2. Isytiharkan Pembolehubah sebagai Global:
Anda boleh mengisytiharkan pembolehubah $sxml sebagai global di dalam foo() fungsi:
$sxml = new SimpleXMLElement('<somexml/>'); function foo(){ global $sxml; $child = $sxml->addChild('child'); } foo();
Kaedah ini memerlukan kata kunci global digunakan sebelum nama pembolehubah, dan ia berfungsi kerana ia menambahkan pembolehubah $sxml pada skop global, menjadikannya boleh diakses dalam foo().
3. Gunakan Penutupan:
Anda boleh membuat penutupan dengan mengisytiharkan pembolehubah dalam klausa penggunaan. Pendekatan ini berfungsi walaupun pembolehubah ditakrifkan dalam fungsi luar:
function bar(){ $sxml = new SimpleXMLElement('<somexml/>'); function foo() use (&$sxml){ $child = $sxml->addChild('child'); } foo(); } bar();
Dengan menggunakan klausa penggunaan, anda mencipta penutupan yang mengekalkan akses kepada pembolehubah $sxml daripada fungsi luar.
Penyelesaian ini membolehkan anda mengakses pembolehubah global di dalam fungsi dengan berkesan. Memilih pendekatan terbaik bergantung pada keperluan khusus kod dan kebimbangan prestasi anda.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mengakses Pembolehubah Global Saya Di Dalam Fungsi PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!