လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> spl_autoload_unregister ကိုဖြေရှင်းနိုင်မလား။ သတ်မှတ်ထားသော autoloader ကိုတိကျစွာဖယ်ထုတ်ရမည်ကိုသင်ပေးပါ

spl_autoload_unregister ကိုဖြေရှင်းနိုင်မလား။ သတ်မှတ်ထားသော autoloader ကိုတိကျစွာဖယ်ထုတ်ရမည်ကိုသင်ပေးပါ

gitbox 2025-08-07
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ဤကုဒ်၏ဤအပိုင်းသည်ဆောင်းပါး၏အကြောင်းအရာများနှင့်လုံးဝမသက်ဆိုင်ပါ,စင်ကြယ်သောအလှဆင်</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;h1&gt;နည်းပညာဆိုင်ရာဆောင်းပါးပြပွဲ&lt;/h1&gt;"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;p&gt;ဒီဆောင်းပါးမိတ်ဆက် PHP အလယ်ပိုင်း spl_autoload_unregister function ကိုအသုံးပြုမှုအသေးစိတ်。&lt;/p&gt;"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * spl_autoload_unregister ၎င်းကိုဖြေရှင်းမည်လား?သတ်မှတ်ထားသော autoloader ကိုတိကျစွာဖယ်ထုတ်ရမည်ကိုသင်ပေးပါ
 *
 * တည်နေ PHP အလယ်ပိုင်း,အလိုအလျောက်တင်ဆောင်ယန္တရားသည် class loading လွယ်ကူချောမွေ့စေသည်,尤其是တည်နေ面向ကန့်ကွက်开发အလယ်ပိုင်း。
 * သွား spl_autoload_register Multiple Autoledoading function များကိုမှတ်ပုံတင်နိုင်သည်,
 * နှင့် spl_autoload_unregister အချို့သောအလိုအလျောက်တင်ထားသော function ကိုထွက်ရန်အသုံးပြုခဲ့သည်。
 * 
 * ဒါပေမဲ့,有不少开发者တည်နေအသုံးပြု spl_autoload_unregister ငါကတွေ့ဆုံခဲ့သည်“အမှားဖြေရှင်းပါ”ပြနာ,
 * ဆိုလိုသည်မှာမူလက logged လုပ်လိုသော autoloader ကိုစနစ်တကျထုတ်လွှတ်ခြင်းမပြုခဲ့ပါ,ဒီပရိုဂရမ်ကအလိုအလျောက် loading function ကိုဖုန်းဆက်ဆဲ。
 * 
 * ဤဆောင်းပါးသည်နက်ရှိုင်းသောခွဲခြမ်းစိတ်ဖြာမှုကိုပြုလုပ်လိမ့်မည် spl_autoload_unregister အပြုအမူ,
 * 并သတ်မှတ်ထားသော autoloader ကိုတိကျစွာဖယ်ထုတ်ရမည်ကိုသင်ပေးပါ,ရေှာင်ရှား“အမှားဖြေရှင်းပါ”。
 */</span>

</span><span><span class="hljs-comment">// တစ်、spl_autoload_register နှင့် spl_autoload_unregister နိဒါန်း</span></span><span>
</span><span><span class="hljs-comment">// spl_autoload_register — 注册တစ်个函数作为 __autoload() အကောင်အထည်မဖေါ်ခြင်း</span></span><span>
</span><span><span class="hljs-comment">// spl_autoload_unregister — 注销တစ်个已注册的自动加载函数</span></span><span>

</span><span><span class="hljs-comment">// မှတ်ပုံတင်ခြင်းဥပမာ</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">my_autoload</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$className</span></span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Loading Class:<span class="hljs-subst">$className</span></span></span><span>\n";
}
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'my_autoload'</span></span><span>);

</span><span><span class="hljs-comment">// uninstall ဥပမာ</span></span><span>
</span><span><span class="hljs-comment">// 如果传入的回调函数နှင့်注册时传入的完全相同,သာအောင်မြင်စွာပယ်ဖျက်</span></span><span>
</span><span><span class="hljs-comment">// ဥပမာအားဖြင့်:</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoload'</span></span><span>); </span><span><span class="hljs-comment">// အောင်မြင်မှုအောင်မြင်</span></span><span>

</span><span><span class="hljs-comment">// နှစ်、အဘယ်ကြောင့်လွှတ်ပေးရန်ပျက်ကွက်သနည်း(“အမှားဖြေရှင်းပါ”)?</span></span><span>

<span class="hljs-comment">/*
 * 1. 传入的回调参数不တစ်致
 *    PHP အဆိုပါ callback အတူတူပင်ရှိမရှိဆုံးဖြတ်တဲ့အခါ,要求完全တစ်致:
 *    - အကယ်. ၎င်းသည် string function name တစ်ခုဖြစ်ပါက,名字必须完全တစ်样
 *    - ဒါက array တစ်ခုပါ,အဆိုပါခင်းကျင်းအကြောင်းအရာအတိအကျအတူတူဖြစ်ရမည်(အတန်းအမည်/ကန့်ကွက် + နည်းလမ်းအမည်)
 *    - 匿名函数必须传递同တစ်个实例,အမည်မသိအမည်မသိလုပ်ဆောင်ချက်များကိုကွဲပြားခြားနားသည်
 * 
 * 2. အမည်မသိလုပ်ဆောင်ချက်များကြောင့်ဖြေရှင်းရန်အခက်အခဲ
 *    အမည်မသိလုပ်ဆောင်ချက်များအမည်မသိကတည်းက,အချိန်တိုင်းရေးပါ new Closure() အားလုံးကွဲပြားခြားနားသောဥပမာများဖြစ်ကြသည်,
 *    无法သွား spl_autoload_unregister ထုတ်ဝေခြင်း,ရည်ညွှန်းသိမ်းဆည်းခြင်းမရှိပါက。
 * 
 * 3. ထုတ်ဝေခြင်း前没有确认回调存တည်နေ
 *    尝试ထုတ်ဝေခြင်း未注册的回调,PHP အဘယ်သူမျှမအမှားများအစီရင်ခံတင်ပြ,ဒါပေမယ့်အကျိုးသက်ရောက်မှုယူလို့မရပါဘူး。
 */</span>

</span><span><span class="hljs-comment">// သုံး、如何精准ထုတ်ဝေခြင်း指定的自动加载器?</span></span><span>

<span class="hljs-comment">/*
 * 1. callback function ကိုကိုးကားပါ
 *    သင်မှတ်ပုံတင်ရန်အမည်မသိ function ကိုသုံးလျှင်,ရည်ညွှန်းပထမ ဦး ဆုံးကယ်တင်ခံရဖို့ရပါမည်,နောက်မှဖျက်သိမ်းနိုင်ပါသည်。
 */</span>
</span><span><span class="hljs-variable">$loader</span></span><span> = </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အမည်မသိလူတန်းစားကိုတင်ပါ <span class="hljs-subst">$class</span></span></span><span>\n";
};
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-variable">$loader</span></span><span>);
</span><span><span class="hljs-comment">// ထုတ်ဝေခြင်း</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-variable">$loader</span></span><span>);

<span class="hljs-comment">/*
 * 2. အသုံးပြု明确的函数或静态နည်းလမ်းအမည်注册,ထုတ်ဝေခြင်း时直接用同名即可
 */</span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">Loader</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">load</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Loader Loading Class:<span class="hljs-subst">$class</span></span></span><span>\n";
    }
}
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>([</span><span><span class="hljs-string">'Loader'</span></span><span>, </span><span><span class="hljs-string">'load'</span></span><span>]);
</span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>([</span><span><span class="hljs-string">'Loader'</span></span><span>, </span><span><span class="hljs-string">'load'</span></span><span>]);

<span class="hljs-comment">/*
 * 3. 先သွား spl_autoload_functions() အားလုံးလက်ရှိမှတ်ပုံတင်ထားသော autoloading functions အားလုံးရယူပါ,
 *    ပစ်မှတ် function ကိုနှိုင်းယှဉ်,确认存တည်နေ后再ထုတ်ဝေခြင်း。
 */</span>
</span><span><span class="hljs-variable">$registered</span></span><span> = </span><span><span class="hljs-title function_ invoke__">spl_autoload_functions</span></span><span>();
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$registered</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$callback</span></span><span> === </span><span><span class="hljs-string">'my_autoload'</span></span><span>) {
        </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoload'</span></span><span>);
        </span><span><span class="hljs-keyword">break</span></span><span>;
    }
}

<span class="hljs-comment">/*
 * 4. အကြံပြု encapsulation အော်တို loader စီမံခန့်ခွဲမှု,统တစ်注册与ထုတ်ဝေခြင်း,ရေှာင်ရှား遗漏回调引用。
 */</span>

</span><span><span class="hljs-comment">// လေး、အကျဉ်းချုပ်</span></span><span>

<span class="hljs-comment">/*
 * - spl_autoload_unregister ထုတ်ဝေခြင်း的是完全相同的回调实例。
 * - အမည်မသိလုပ်ဆောင်ချက်များသည် variable များကိုသက်သာရမည်,才能ထုတ်ဝေခြင်း。
 * - အသုံးပြု spl_autoload_functions() လက်ရှိမှတ်ပုံတင်ထားသော autoloader ကိုကြည့်ပါ,ရေှာင်ရှားထုတ်ဝေခြင်း错误。
 * - အလိုအလျောက်ဝန်ပြန်ပို့ခြင်း၏စီမံခန့်ခွဲမှုစံ,ရေှာင်ရှားထုတ်ဝေခြင်း失败。
 *
 * ဤကျွမ်းကျင်မှုကိုကျွမ်းကျင်,能让你精准ထုတ်ဝေခြင်း指定的自动加载器,ရေှာင်ရှား PHP အလိုအလျောက်တင် Chaos。
 */</span>

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>