PHP တွင်ပစ္စည်းတစ်ခုရှိမရှိတရားစီရင်ခြင်းကိုဆုံးဖြတ်သည့်အခါ အိမ်ခြံမြေ 0 န်ကြီး့များ () သည်ဘုံနည်းလမ်းတစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါအချို့ထောင်ချောက်များသို့ကျရောက်တတ်သည်။ ဤဆောင်းပါးသည် Property_exists ၏အသုံးပြုမှုထောင်ချောက်များနှင့်ဖြေရှင်းနည်းများကိုအသေးစိတ်ဖော်ပြထားသည်။
အိမ်ခြံမြေဆိုင်ရာ 0 န်ကြီးချုပ် () သည်အရာဝတ်ထုတစ်ခုသို့မဟုတ်အတန်းတစ်ခုတွင်ပစ္စည်းဥစ်စာပိုင်ဆိုင်မှုရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
property_exists(object|string $object_or_class, string $property): bool
ဥပမာ -
class User {
public $name;
}
$user = new User();
var_dump(property_exists($user, 'name')); // true
var_dump(property_exists($user, 'email')); // false
၎င်းသည်ရိုးရှင်းပြီးထိုးထွင်းသိမြင်မှုရှိပုံရသော်လည်းပြ problem နာကိုယုံကြည်စိတ်ချရသောအသုံးပြုမှုနောက်ကွယ်တွင်ဝှက်ထားခြင်းဖြစ်သည်။
Property_exists () သည်ပိုင်ဆိုင်မှုရှိ, ပစ္စည်းဥစ်စာပိုင်ဆိုင်မှုကိုမသတ်မှတ်ထားရင်တောင်မှာ မှန်ပါတယ် ။ အရာဝတ်ထု (I.E. ကိုတန်ဖိုးထားခြင်း) တွင် "တည်ရှိ" ပိုင်ဆိုင်မှုရှိမရှိဆုံးဖြတ်လိုလျှင်သင်လမ်းလွဲစေနိုင်သည်။
class Person {
public $age;
}
$p = new Person();
var_dump(property_exists($p, 'age')); // true
unset($p->age);
var_dump(property_exists($p, 'age')); // true
ပစ္စည်းဥစ်စာ ပိုင်ဆိုင်မှု သည် မရှိမဖြစ်လိုအပ်သည် () ,
ဖြေရှင်းချက် - robine is abset () သို့မဟုတ် array_key_exists () အမှန်တကယ်တည်ရှိမှုကိုဆုံးဖြတ်ရန် () array_key_key_exists ()) ။
if (property_exists($p, 'age') && isset($p->age)) {
// အဆိုပါ attribute ကိုတည်ရှိပြီးတန်ဖိုးရှိသည်
}
အကယ်. __GET () သည် Property Access ကိုတုပရန်အတန်းထဲတွင်အသုံးပြုသည်ဆိုပါက Property_exists () သည် ဤ "virtual propertys" ကိုမရိပ်မိပါ။
class Config {
private $data = ['env' => 'prod'];
public function __get($name) {
return $this->data[$name] ?? null;
}
}
$c = new Config();
var_dump(property_exists($c, 'env')); // false
ဖြေရှင်းချက် - __GET () ကိုအတန်းအစား, method_exists () () () သို့မဟုတ်အတန်းအစားကိုယ်နှိုက်၏တရားစီရင်ခြင်းယန္တရားကိုအသုံးပြုသင့်သည်။
if (method_exists($c, '__get') && isset($c->env)) {
// အသုံးပြု __get ရရှိသောဂုဏ်သတ္တိများ
}
Property_exists () သည် ငြိမ်ပစ္စည်းများကိုအကဲဖြတ်ရန်အသုံးပြုနိုင်သည်။
class Site {
public static $domain = 'gitbox.net';
}
var_dump(property_exists(Site::class, 'domain')); // true
$site = new Site();
var_dump(property_exists($site, 'domain')); // true
ဤဥပမာတွင်ရရှိသောရလဒ်သည် မှန်ကန် သော်လည်းအချို့သောမူဘောင်များသည်အမွေဆက်ခံခြင်း, ပျင်းရိသောသို့မဟုတ်မှော်နည်းများဖြင့်ရှုပ်ထွေးနိုင်သည်။ Class Name string ကို static ဂုဏ်သတ္တိများကိုတရားစီရင်ရန်အတိအလင်းအသုံးချသင့်သည်။
ဤအန္တရာယ်များကိုရှောင်ရှားရန်အောက်ပါနည်းလမ်းများကိုပိုမိုအားကောင်းသည့်တရားစီရင်ရေးလုပ်ရန်အကြံပြုသည်။
function isPropertyAccessible($object, $property) {
if (!is_object($object)) return false;
if (!property_exists($object, $property)) return false;
return isset($object->$property);
}
ဖွံ့ဖြိုးရေးစဉ်အတွင်းသင်ဟာ attributes တွေကိုပုံမှန်တရားစီရင်ဖို့လိုတယ်ဆိုရင်ထပ်ခါတလဲလဲထောင်ချောက်တွေကိုရှောင်ရှားဖို့အလားတူယုတ္တိဗေဒကို encapsulate လုပ်ဖို့အကြံပြုထားတယ်။
ဥပမာအားဖြင့်, JSON ဒေတာကိုအဝေးမှနေတဲ့ interface ကိုပြောင်းပြီးအ ရာ ဝတ်ထုတစ်ခုသို့ပြောင်းလဲခြင်းပြုလုပ်ပြီးနောက် developer သည် field တစ်ခုရှိ,
$response = file_get_contents('https://api.gitbox.net/user/profile');
$data = json_decode($response);
if (property_exists($data, 'nickname')) {
echo $data->nickname;
}
အကယ်. လယ်ကွက်ကိုမှော်အတတ်များသို့မဟုတ်ဖွဲ့စည်းတည်ဆောက်ပုံဆိုင်ရာအဆင့်အပြောင်းအလဲများကို အသုံးပြု. backend မှထုတ်လုပ်သည်ဆိုပါကဤတရားစီရင်ခြင်းသည်လိုအပ်ချက်များနှင့်မကိုက်ညီပါ။ ထို့ကြောင့်၎င်းကိုအမှန်တကယ်အသုံးပြုသောအခါစီးပွားရေးယုတ္တိဗေဒအပေါ် အခြေခံ. ပိုမိုသင့်လျော်သောတရားစီရင်ခြင်းနည်းလမ်းကိုရွေးချယ်သင့်သည်။
Phot_exists () သည် PHP မှပေးသောအဆင်ပြေသောကိရိယာတစ်ခုဖြစ်သော်လည်း၎င်းသည်အကန့်အသတ်ရှိသည်။ ၎င်းကို အသုံးပြုသောအခါ developer များက၎င်း၏တရားစီရင်ခြင်းသည် "Runtime State" ထက် "class definition" ဖြစ်သည် ။
ဤကဲ့သို့ 0 ယ်ယူမှုများကိုနားလည်သဘောပေါက်ခြင်းနှင့်ကျော်လွှားခြင်းကကျွန်ုပ်တို့အားကြံ့ခိုင်ပြီးထိန်းသိမ်းထားသော PHP code ကိုရေးရန်ကူညီနိုင်သည်။