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

ပစ္စည်းဥစ်စာပိုင်ဆိုင်မှုတစ်ခုရှိမရှိစစ်ကြောစီရင်ဆုံးဖြတ်သည့်အခါ Property_exists ဘုံထောင်ချောက်များ

gitbox 2025-06-06

PHP တွင်ပစ္စည်းတစ်ခုရှိမရှိတရားစီရင်ခြင်းကိုဆုံးဖြတ်သည့်အခါ အိမ်ခြံမြေ 0 န်ကြီး့များ () သည်ဘုံနည်းလမ်းတစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါအချို့ထောင်ချောက်များသို့ကျရောက်တတ်သည်။ ဤဆောင်းပါးသည် Property_exists ၏အသုံးပြုမှုထောင်ချောက်များနှင့်ဖြေရှင်းနည်းများကိုအသေးစိတ်ဖော်ပြထားသည်။

1 ။ 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 နာကိုယုံကြည်စိတ်ချရသောအသုံးပြုမှုနောက်ကွယ်တွင်ဝှက်ထားခြင်းဖြစ်သည်။

2 ။ ဘုံထောင်ချောက်

ထောင်ချောက် 1 - ၎င်းသည်အတန်းအစားသတ်မှတ်ထားသည့်ပစ္စည်းတစ်ခုဖြစ်သည်။

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 ကိုတည်ရှိပြီးတန်ဖိုးရှိသည်
}

ထောင်ချောက် 2 - မှော်နည်းလမ်းများ၏သွဇာလွှမ်းမိုးမှု __ ဂျက် () နှင့် __ မလီတ် ()

အကယ်. __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 ရရှိသောဂုဏ်သတ္တိများ
}

Trap 3: static attribute တွေအကဲဖြတ်အတွက်အမှားများ

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 ဂုဏ်သတ္တိများကိုတရားစီရင်ရန်အတိအလင်းအသုံးချသင့်သည်။

3 ။ attribute သည် "ထိရောက်သော" ရှိမရှိလုံခြုံစွာဆုံးဖြတ်ရန်

ဤအန္တရာယ်များကိုရှောင်ရှားရန်အောက်ပါနည်းလမ်းများကိုပိုမိုအားကောင်းသည့်တရားစီရင်ရေးလုပ်ရန်အကြံပြုသည်။

 function isPropertyAccessible($object, $property) {
    if (!is_object($object)) return false;
    if (!property_exists($object, $property)) return false;
    return isset($object->$property);
}

ဖွံ့ဖြိုးရေးစဉ်အတွင်းသင်ဟာ attributes တွေကိုပုံမှန်တရားစီရင်ဖို့လိုတယ်ဆိုရင်ထပ်ခါတလဲလဲထောင်ချောက်တွေကိုရှောင်ရှားဖို့အလားတူယုတ္တိဗေဒကို encapsulate လုပ်ဖို့အကြံပြုထားတယ်။

4 ။ လက်တွေ့ကျသော application တစ်ခု၏ဥပမာများ

ဥပမာအားဖြင့်, 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 မှထုတ်လုပ်သည်ဆိုပါကဤတရားစီရင်ခြင်းသည်လိုအပ်ချက်များနှင့်မကိုက်ညီပါ။ ထို့ကြောင့်၎င်းကိုအမှန်တကယ်အသုံးပြုသောအခါစီးပွားရေးယုတ္တိဗေဒအပေါ် အခြေခံ. ပိုမိုသင့်လျော်သောတရားစီရင်ခြင်းနည်းလမ်းကိုရွေးချယ်သင့်သည်။

V. နိဂုံးချုပ်

Phot_exists () သည် PHP မှပေးသောအဆင်ပြေသောကိရိယာတစ်ခုဖြစ်သော်လည်း၎င်းသည်အကန့်အသတ်ရှိသည်။ ၎င်းကို အသုံးပြုသောအခါ developer များက၎င်း၏တရားစီရင်ခြင်းသည် "Runtime State" ထက် "class definition" ဖြစ်သည်

ဤကဲ့သို့ 0 ယ်ယူမှုများကိုနားလည်သဘောပေါက်ခြင်းနှင့်ကျော်လွှားခြင်းကကျွန်ုပ်တို့အားကြံ့ခိုင်ပြီးထိန်းသိမ်းထားသော PHP code ကိုရေးရန်ကူညီနိုင်သည်။