PHP ၏ရောင်ပြန်ဟပ်မှု API ကိုအသုံးပြုသောအခါ GetNameptiones များသည် အလွန်အသုံးဝင်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည် Govern NameSTRESS ကို အသုံးပြုသောအခါပြ a နာတစ်ခုနှင့်ကြုံတွေ့ရသည်။ ၎င်းသည်ပုံမှန် namespace ကိုမရနိုင်ပါ။ ဒါဘာကြောင့်လဲ ထို့နောက်ကျွန်ုပ်တို့သည်ဤပြ problem နာကိုခွဲခြမ်းစိတ်ဖြာပြီးဖြေရှင်းနည်းများအဆိုပြုထားလိမ့်မည်။
PHP တွင် Namespace ကိုကုဒ်ကိုစုစည်းရန်နှင့်ပ conflicts ိပက်ခများကိုရှောင်ရှားရန်အသုံးပြုသည်။ PHP ဖိုင်တစ်ခုစီတွင် namespace keyword မှတဆင့် namespace များသောအားဖြင့်ကြေငြာနိုင်သည်။ သို့သော်ဖိုင်သည် namespace ကိုအတိအလင်းကြေငြာခြင်းမရှိပါက၎င်းကို default namespace ဟုသတ်မှတ်လိမ့်မည်။
ဥပမာအားဖြင့်:
// မသုံးပါ namespace အသေအချာပေြာဆိုချက်,ပုံမှန် namespace ပိုင်
class MyClass {
// အတန်း၏ contents
}
ဤကုဒ်တွင် MyClass သည် ပုံမှန် namespace နှင့်သက်ဆိုင်သည်။
PHP ရှိ GetNonptionSTRESS နည်းလမ်းသည်များသောအားဖြင့်အတန်းအစား, interface သို့မဟုတ် function ကိုအသုံးပြုသော namespace ကိုရရှိရန်အသုံးပြုသည်။ သို့သော်သင်သည် namespace ကိုအတိအလင်းကြေငြာခြင်းမရှိသောစာသင်ခန်းတစ်ခုရရန်ကြိုးစားသောအခါ GetNameptiones များသည် ပုံမှန် namespace ကိုမပြန်ပါ။ အဘယ်ကြောင့်ဆိုသော် GetNonPoses သည်အဓိကအားဖြင့် namespace keyword မှတစ်ဆင့်အမည်စာရင်းတင်သွင်းသည့်သော့ချက်စာလုံးများမှတစ်ဆင့်ကြေငြာရန်အဓိကအားဖြင့်အသုံးပြုသောကြောင့်ဖြစ်သည်။
ဥပမာအားဖြင့်:
$reflection = new ReflectionClass('MyClass');
$namespaces = $reflection->getNamespaces();
print_r($namespaces);
namespace နှင့်မကြေငြာသည့် MyChsass အတွက်ဤကုဒ်သည်ပုံမှန် namespace နှင့်ပတ်သက်သောမည်သည့်သတင်းအချက်အလက်ကိုမဆိုမပြန်ပါ ။
အဘယ်ကြောင့် GetNon Namespace ကိုအဘယ်ကြောင့်မရနိုင်သနည်း ဘာကြောင့်လဲဆိုတော့ PHP သည်ကမ္ဘာလုံးဆိုင်ရာ namespace အတွက်ရှင်းလင်းပြတ်သားစွာ namespace အမှတ်အသားကိုသတ်မှတ်ခြင်းမရှိသောကြောင့်ဖြစ်သည်။ တစ်နည်းပြောရလျှင်ကမ္ဘာလုံးဆိုင်ရာအမည်များကို PHP ၏ရောင်ပြန်ဟပ်မှုစနစ်တွင်လုံးလုံးလျားလျားလုပ်ဆောင်ပြီးအတိအလင်းစာရင်းမ 0 င် ပါ ။
ဤအပြုအမူသည် PHP ၏ဒီဇိုင်းအတွေးအခေါ်နှင့်အညီ - ပုံမှန် namesophophy: default namesphace (I.E. , Global Namespace) သည်သွယ်ဝိုက်ပြီးများသောအားဖြင့် code တွင်ဖော်ပြရန်မလိုအပ်ပါ။ ထို့ကြောင့် GetNonproes များကိုအကောင်အထည်ဖော်ခြင်းသည်ဤအခြေအနေကိုမစဉ်းစားပါ။
ရောင်ပြန်ဟပ်မှုကိုအသုံးပြုသောအခါ default namespace နှင့်ပတ်သက်သောသတင်းအချက်အလက်များကိုသင်ရယူရန်လိုအပ်ပါက၎င်းကိုဖြေရှင်းရန်နည်းလမ်းများစွာရှိသည် -
GetEnameSpacename ၏ GetNamename Method သည်အတန်းကိုတည်ရှိရာ Namespace ကိုရနိုင်သည်။ အကယ်. လူတန်းစားသည် namespace ကိုအတိအလင်းကြေငြာခြင်းမရှိပါကအတန်းသည်ပုံမှန် namespace နှင့်သက်ဆိုင်ကြောင်းညွှန်ပြသည့်အချည်းနှီးသော string ကိုပြန်ပို့သည်။
$reflection = new ReflectionClass('MyClass');
$namespace = $reflection->getNamespaceName();
echo $namespace ? $namespace : 'ပုံမှန် namespace';
အကယ်. MyClass သည် namespace ကိုမကြေငြာပါကကုဒ်သည် ပုံမှန် namespace ကို ထုတ်ပေးလိမ့်မည်။
Class Name တွင် class name တစ်ခုရှိမရှိကိုလည်းသင်ဆုံးဖြတ်နိုင်သည်။ ဥပမာအားဖြင့်, class name တွင် backslash ( \ ) မပါရှိပါက၎င်းသည်ပုံမှန် namespace တွင်အတန်းအစားဖြစ်သည်။
$classname = 'MyClass';
if (strpos($classname, '\\') === false) {
echo 'ပုံမှန် namespace';
} else {
$reflection = new ReflectionClass($classname);
echo $reflection->getNamespaceName();
}
ဤနည်းလမ်းသည် Class Name တွင် class name တွင်အမည်စာရင်းခွဲခြားသတ်မှတ်ခြင်းရှိမရှိဆုံးဖြတ်ရန်ရိုးရှင်းသော string စစ်ဆင်ရေးများကိုအသုံးပြုသည်။
သင်ပိုမိုရှုပ်ထွေးသောရောင်ပြန်ဟပ်မှုအပြုအမူလိုအပ်ပါကသင် ထင်ဟပ်ချက်များကို စိတ်ကြိုက်ရောင်ပြန်ဟပ်မှုအတန်းများဖြင့်ပိုမိုကျယ်ပြန့်စွာတိုးချဲ့နိုင်သည်။
class CustomReflectionClass extends ReflectionClass {
public function getCustomNamespaces() {
if (empty($this->getNamespaceName())) {
return 'ပုံမှန် namespace';
}
return $this->getNamespaceName();
}
}
$reflection = new CustomReflectionClass('MyClass');
echo $reflection->getCustomNamespaces();
ဤနည်းလမ်းသည်သင့်အားပုံမှန်မဟုတ်သော namespace တစ်ခုသို့ပုံမှန်မဟုတ်သော namespace ကိုအတန်းထဲသို့ 0 င်ရောက်ခြင်း,
GetNamespace ကို ပုံမှန် namespace မရရှိနိုင်သည့်အကြောင်းအရင်းမှာပုံမှန် namespace ကိုကိုင်တွယ်ခြင်း (Global Namespace) ကိုကိုင်တွယ်ခြင်းသည်သွယ်ဝိုက်။ ရောင်ပြန်ဟပ်မှုကကမ္ဘာလုံးဆိုင်ရာ namespace ကိုပုံမှန်အားဖြင့်မစဉ်းစားပါ။ ဤပြ problem နာကိုဖြေရှင်းရန် GetNamePacename Method Method Method, Judge Class Name သို့မဟုတ် Custom Refectscess Class ကိုသုံးနိုင်သည်။ ဤနည်းလမ်းများမှတစ်ဆင့်ကျွန်ုပ်တို့သည်သက်ဆိုင်ရာ namespace ၏သက်ဆိုင်ရာစစ်ဆင်ရေးများကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိသည်။