လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ပြောင်းလွယ်ပြင်လွယ်သောတရားသူကြီးများကိုရရှိရန် is_a () နှင့်ပေါင်းစပ်ထားသောပိတ်ထားသောလုပ်ဆောင်ချက်များကိုသုံးပါ

ပြောင်းလွယ်ပြင်လွယ်သောတရားသူကြီးများကိုရရှိရန် is_a () နှင့်ပေါင်းစပ်ထားသောပိတ်ထားသောလုပ်ဆောင်ချက်များကိုသုံးပါ

M66 2025-05-29

PHP တွင် is_a function သည်အရာဝတ်ထုတစ်ခုသည်အတန်းအစားသို့မဟုတ်ယင်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသည်။ ဒါဟာအမျိုးအစားရှာဖွေရေးအတွက်အလွန်သင့်လျော်သည်။ သို့သော်သင်ပိုမိုပြောင်းလွယ်ပြင်လွယ်။ ကျယ်ကျယ်ပြန့ ပြန့်သောအမျိုးအစားတရားသူကြီးတစ် ဦး ကိုရေးလို လျှင် ,

ပြောင်း လွယ်ပြင်လွယ်အမျိုးအစားတရားသူကြီးတစ် ဦး ကိုမည်သို့ရေးရမည်ကိုခြေလှမ်းတစ်လှမ်းစီကြည့်ရအောင်။


1 ။ ရိုးရှင်းသော is_a အသုံးပြုမှုပြန်လည်သုံးသပ်ခြင်း

 <?php
class Animal {}
class Dog extends Animal {}

$dog = new Dog();

var_dump(is_a($dog, 'Dog'));      // bool(true)
var_dump(is_a($dog, 'Animal'));   // bool(true)
var_dump(is_a($dog, 'Cat'));      // bool(false)
?>

is_a သည်အရာဝတ်ထုတစ်ခုသည်လူတန်းစားအချို့သို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်နိုင်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အတွက်အခြေခံကျရန်အခြေခံဖြစ်သည်။


2 ။ ပိတ်ပစ် encapsulationulations type address just address ကိုယုတ္တိဗေဒကိုအသုံးပြုပါ

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

 <?php
$typeCheckers = [
    'dog' => function($obj) {
        return is_a($obj, 'Dog');
    },
    'animal' => function($obj) {
        return is_a($obj, 'Animal');
    },
    'string' => function($obj) {
        return is_string($obj);
    }
];

// အသုံးပြုမှုဥပမာ
function checkType($obj, $type, $checkers) {
    if (!isset($checkers[$type])) {
        throw new InvalidArgumentException("အမည်မသိအမျိုးအစား: $type");
    }
    return $checkers[$type]($obj);
}

$dog = new Dog();
var_dump(checkType($dog, 'dog', $typeCheckers));      // bool(true)
var_dump(checkType($dog, 'animal', $typeCheckers));   // bool(true)
var_dump(checkType("hello", 'string', $typeCheckers));// bool(true)
?>

ဤနည်းအားဖြင့်အမျိုးအစားအသစ်ကိုတရားစီရင်ခြင်းကိုထည့်သွင်းခြင်းက $ cyme typeCecheckers ခင်းကျင်းမှုများကိုပိတ်ပစ်ရန်လိုအပ်သည်။


3 ။ class name parameters များနှင့်ပြောင်းလဲနေသောတိုးချဲ့ခြင်းကိုထောက်ပံ့ပါ

တခါတရံတွင်ကျွန်ုပ်တို့သည်အတန်းအစားအမည်ပေါ်တွင် အခြေခံ. တရားသူကြီးတစ် ဦး ကိုတက်ကြွစွာဖန်တီးရန်လိုအပ်သည်။

 <?php
function makeIsATypeChecker(string $className) {
    return function($obj) use ($className) {
        return is_a($obj, $className);
    };
}

$typeCheckers['cat'] = makeIsATypeChecker('Cat');

// စမ်းသပ်မှု
class Cat extends Animal {}
$cat = new Cat();
var_dump(checkType($cat, 'cat', $typeCheckers)); // bool(true)
?>

၎င်းသည်ကျွန်ုပ်တို့၏အမျိုးအစားတရားသူကြီးစနစ်ကို ပိုမို. စွယ်စုံနှင့်ထိန်းသိမ်းရန်လွယ်ကူစေသည်။


4 ။ interface နှင့်မိဘအတန်းအစားဘာသာစကားမျိုးစုံတရားသဖြင့်စီရင်ခြင်း

တခါတရံအရာဝတ်ထုသည်အချို့သော interface ကိုအကောင်အထည်ဖော်ခြင်းရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်ကိုကျွန်ုပ်တို့ဆုံးဖြတ်ရန်လိုအပ်သည်။

 <?php
function makeClassOrInterfaceChecker(string $name) {
    return function($obj) use ($name) {
        return is_a($obj, $name) || in_array($name, class_implements($obj));
    };
}

interface Pet {}
class Dog extends Animal implements Pet {}

$typeCheckers['pet'] = makeClassOrInterfaceChecker('Pet');

$dog = new Dog();
var_dump(checkType($dog, 'pet', $typeCheckers)); // bool(true)
?>

ဤနည်းအားဖြင့်အမွေဆက်ဆက်ဆက်ဆံရေးနှင့် interface အကောင်အထည်ဖော်မှုနှစ်ခုလုံးကိုအကောင်အထည်ဖော်ရန်အလွန်ပြောင်းလွယ်ပြင်လွယ်ရှိသည်။


5 ။ ပြည့်စုံသောနမူနာကုဒ်

 <?php
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

interface Pet {}

class DogPet extends Dog implements Pet {}

function checkType($obj, $type, $checkers) {
    if (!isset($checkers[$type])) {
        throw new InvalidArgumentException("အမည်မသိအမျိုးအစား: $type");
    }
    return $checkers[$type]($obj);
}

function makeIsATypeChecker(string $className) {
    return function($obj) use ($className) {
        return is_a($obj, $className);
    };
}

function makeClassOrInterfaceChecker(string $name) {
    return function($obj) use ($name) {
        return is_a($obj, $name) || in_array($name, class_implements($obj));
    };
}

$typeCheckers = [
    'dog' => makeIsATypeChecker('Dog'),
    'animal' => makeIsATypeChecker('Animal'),
    'pet' => makeClassOrInterfaceChecker('Pet'),
    'string' => function($obj) { return is_string($obj); },
];

// စမ်းသပ်မှု
$dog = new Dog();
$cat = new Cat();
$dogPet = new DogPet();

var_dump(checkType($dog, 'dog', $typeCheckers));      // true
var_dump(checkType($cat, 'animal', $typeCheckers));   // true
var_dump(checkType($dogPet, 'pet', $typeCheckers));   // true
var_dump(checkType("hello", 'string', $typeCheckers));// true
?>

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