လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP သည်အတန်းအမှားများနှင့်ဖြေရှင်းချက်အသေးစိတ်ရှင်းလင်းချက်များကိုထပ်ခါတလဲလဲကြေငြာခြင်းမပြုနိုင်ပါ

PHP သည်အတန်းအမှားများနှင့်ဖြေရှင်းချက်အသေးစိတ်ရှင်းလင်းချက်များကိုထပ်ခါတလဲလဲကြေငြာခြင်းမပြုနိုင်ပါ

M66 2025-06-22

PHP အမှား - အတန်းကိုထပ်တလဲလဲအသေးစိတ်ဖြေရှင်းချက်ကိုကြေငြာ။ မရပါ

PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်အမှားအယွင်းများကိုကြုံတွေ့ရလေ့ရှိသည်။ ၎င်းတို့အနက် "အတန်းကိုအကြိမ်ကြိမ်ကြေငြာခြင်းကိုမကြေညာနိုင်" ဟုမပြောနိုင်ပါ။ ဤအမှားသည်ရိုးရှင်းသည်ဟုထင်သော်လည်းအချိန်တန်လျှင်မလုပ်ဆောင်လျှင်၎င်းသည် Code Execution ကိုပြတ်တောက်စေလိမ့်မည်။ ဤဆောင်းပါးသည်ဤအမှား၏အကြောင်းရင်းများနှင့်ပြ problems နာများကိုအလျင်အမြန်ဖြေရှင်းနိုင်ရန်ကူညီရန်ထိရောက်သောဖြေရှင်းနည်းသုံးခုကိုမိတ်ဆက်ပေးလိမ့်မည်။

ကြေငြာစာသင်ခန်းကိုထပ်ခါတလဲလဲမရသည့်အကြောင်းရင်းများ

PHP Code တွင်တူညီသောအတန်းအစားကိုအကြိမ်ပေါင်းများစွာသတ်မှတ်သည့်အခါ PHP သည် "အတန်းအစားကိုထပ်ခါတလဲလဲကြေငြာခြင်းမပြုနိုင်" သောဆိုးဝါးသောအမှားကိုဖယ်ရှားပေးလိမ့်မည်။ PHP သည်တူညီသောအမည်နှင့်တူညီသောပြေးလွှာကိုထပ်ခါတလဲလဲဖော်ပြရန်ခွင့်မပြုပါ။ ဤတွင်ရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။

<?php
class MyClass {
  // Some code...
}

class MyClass {
  // Another code...
}
?>

အထက်ပါကုဒ်ကိုဖွင့်သောအခါ, အောက်ပါကဲ့သို့သောအမှားပေါ်လာလိမ့်မည်။

Fatal Error: အတန်းနံပါတ်ပေါ်ရှိဖိုင်အမည်ရှိလူတန်းစား MyClass ကိုမ redeclare မ redeclare

ဖြေရှင်းချက် 1 - လူတန်းစားသင်တန်းများ () ကိုဆုံးဖြတ်ရန် () ကိုသုံးပါ

စာသင်ခန်းမသတ်မှတ်ခင်အတန်းအစားရှိပြီးသားရှိမရှိဆုံးဖြတ်ရန် Class_exists () function ကိုသုံးပါ။ ၎င်းကိုမတည်ရှိသည့်အခါ၎င်းကိုထပ်ခါတလဲလဲကြေငြာခြင်းကိုရှောင်ကြဉ်ပါလိမ့်မည်။

<?php
if (!class_exists('MyClass')) {
  class MyClass {
    // Some code...
  }
}
?>

Solution 2: ဖိုင်များကိုတင်သွင်းရန် Seele_once သို့မဟုတ် complet_once ကို သုံးပါ

လိုအပ်ချက်များ (သို့) contam_once မှဖိုင်များကိုမိတ်ဆက်ပေးခြင်းသည်တူညီသောဖိုင်ကိုတစ်ကြိမ်သာဖွင့်ထားပြီးပုံမှန်အတန်းများထပ်ခါတလဲလဲလုပ်ခြင်းကိုရှောင်ရှားရန်လိုအပ်သည်။

<?php
require_once 'myfile.php';

class MyClass {
  // Some code...
}
?>

အကယ်. ဖိုင်သည် MyFILE.PHP ကိုတင်ပါက PHP သည် ထပ်မံ. တင်. အတန်းကိုထပ်ခါတလဲလဲကြေငြာခြင်းမှတားဆီးလိမ့်မည်မဟုတ်ပါ။

Solution 3: Namespace ကိုသုံးပါ

PHP 5.3 သည် Namespace function ကိုမိတ်ဆက်ပေးသည်။

<?php
namespace MyNamespace;

class MyClass {
  // Some code...
}
?>

Namespace မှတစ်ဆင့်အတန်းအစားအမည်နှင့်အတူတူပင်လျှင်ပင်ကြေငြာချက်များနှင့်ပ conflicts ိပက်ခများကိုထပ်ခါတလဲလဲမရရှိနိုင်ကြောင်းသေချာစေသည်။

အကျဉ်းချုပ်

"အတန်းအစားများကိုထပ်ခါတလဲလဲကြေညာရန်မတတ်နိုင်" သောအမှားတစ်ခုကြုံတွေ့ရသောအခါ၎င်းကိုဖြေရှင်းရန်အောက်ပါနည်းလမ်းများကိုရွေးချယ်နိုင်သည်။

  • class_exists () အတန်းကိုသတ်မှတ်ခြင်းရှိမရှိဆုံးဖြတ်ရန် () ကို သုံးပါ။
  • လိုအပ်ချက်များ သို့မဟုတ် into _once မှထည့်သွင်းထားသောဖိုင်များကိုမိတ္တူကူးပါ။
  • တူညီသောအမည်အတန်းကိုသီးခြားခွဲထုတ်ရန် namespace နည်းပညာကိုသုံးပါ။

အထက်ပါနည်းလမ်းများ၏ဆင်ခြင်တုံတရားကိုဆင်ခြင်တုံတရားအသုံးပြုမှုသည်ထပ်ခါတလဲလဲအတန်းအစားကြေငြာချက်များပြ problem နာကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီး Code ၏ထိန်းသိမ်းမှုနှင့်တည်ငြိမ်မှုကိုတိုးတက်စေနိုင်သည်။

ဤဆောင်းပါးသည် PHP developer များကဤအမှားကိုချောချောမွေ့မွေ့ဖြေရှင်းနိုင်ရန်နှင့်ဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုတိုးတက်စေရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။