PHP ၏ PDostatement :: Fetchobject () method) ကိုအသုံးပြုသောအခါဒေတာဘေ့စ်စုံစမ်းမှုသည်အရာဝတ်ထုများသို့တိုက်ရိုက်မြေပုံများကိုအဆင်ပြေစွာမြေပုံဆွဲနိုင်သည်။ သို့သော်တစ်ခါတစ်ရံတွင်အထူးလိုအပ်ချက်များအချို့ကြောင့် (ရည်ညွှန်းဆိုင်ရာပြ issues နာများကိုကာကွယ်ခြင်းကဲ့သို့သော) တွင်ကျွန်ုပ်တို့သည်အရာဝတ်ထုတစ်ခု၏မိတ္တူတစ်မျိုးတည်းကိုတိုက်ရိုက်မြေပုံရေးဆွဲထားသည့်အစားအရာဝတ်ထုတစ်ခုအစား, ဤဆောင်းပါးသည်နက်ရှိုင်းသောပွားများကျွမ်းကျင်မှုအောင်မြင်ရန်ရိုးရှင်းသောနှင့်ထိရောက်သောနည်းလမ်းကိုမိတ်ဆက်ပေးလိမ့်မည်။
သာမန်အခြေအနေများအရ Fetchobject () သည် query line ၏အရာဝတ်ထုအသစ်တစ်ခုကိုပြန်ပို့သည်။ သို့သော်အရာဝတ်ထုတွင်ရည်ညွှန်း attribute များပါ 0 င်ပါက,
ဥပမာအားဖြင့်:
$stmt = $pdo->query('SELECT id, name FROM users');
$user = $stmt->fetchObject(User::class);
// နောက်ဆက်တွဲ $user ပြုပြင်မွမ်းမံမှုများသည်အခြားယုတ္တိဗေဒကိုထိခိုက်စေနိုင်သည်
$user->name = 'New Name';
ဤဘေးထွက်ဆိုးကျိုးများကိုရှောင်ရှားရန်ကျွန်ုပ်တို့ရရှိသောအရာဝတ်ထုသည် လွတ်လပ်ပြီးအချိန်တိုင်းဆီလျှော်မှုမရှိ နိုင်ကြောင်းကျွန်ုပ်တို့မျှော်လင့်ပါသည်။
PHP တွင်နက်ရှိုင်းစွာပွားခြင်းအားအကောင်အထည်ဖော်ရန်တိုက်ရိုက်နည်းလမ်းမှာအရာဝတ်ထုများကို သိမ်းဆည်းခြင်း နှင့် deserialize လုပ်ရန် ဖြစ်သည်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -
function deepCopy($object) {
return unserialize(serialize($object));
}
ဤ နက်ရှိုင်းသော လုပ်ဆောင်မှုသည်အရာဝတ်ထုနှင့်၎င်း၏အတွင်းပိုင်းဂုဏ်သတ္တိများသည်လုံးဝကူးယူပြီးမျှဝေခြင်းမရှိတော့ပါ။
အရာဝတ်ထုတစ်ခုချင်းစီကိုပြန်လည်ရယူပြီးမှနက်နက်ရှိုင်းရှိုင်းကူးယူမှုပြုလုပ်ရန်ကျွန်ုပ်တို့အနည်းငယ် FetchObjectobject () ကိုအနည်းငယ်အကြာတွင်ခြုံနိုင်သည်။
class UserRepository
{
protected PDO $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
public function findAllUsers(): array
{
$stmt = $this->pdo->query('SELECT id, name, profile FROM users');
$users = [];
while ($user = $stmt->fetchObject(User::class)) {
$users[] = $this->deepCopy($user);
}
return $users;
}
protected function deepCopy(object $object): object
{
return unserialize(serialize($object));
}
}
ဒီဥပမာမှာဒေတာဘေ့စ်ကနေထုတ်ယူထားတဲ့အရာဝတ်ထုကိုခြုံဖို့ Bodcopy () ကို သုံးတယ်။ $ user array မှာရှိတဲ့ဒြပ်စင်တစ်ခုစီဟာလွတ်လပ်တဲ့မိတ္တူတစ်ခုဖြစ်တယ်။
Serialization-deserialization နည်းလမ်းသည်ရိုးရှင်းလွယ်ကူပြီးအသုံးပြုရလွယ်ကူသော်လည်းမှတ်စုရန်အချက်များများစွာရှိသည် -
Performance overhead : အထူးသဖြင့်အချက်အလက်အမြောက်အများကိုပြုပြင်သည့်အခါစွမ်းဆောင်ရည်အပေါ်အလွန်အမင်းပြဇာတ်များတွင်အချို့သောသက်ရောက်မှုရှိသည်။
အရာဝတ်ထုကန့်သတ်ချက်များ - အကယ်. အရာဝတ်ထုတွင်သယံဇာတများတွင်အရင်းအမြစ်များပါ 0 င်ပါက,
Custom Copy : အကယ်. အရာဝတ်ထုသည်ရှုပ်ထွေးသောအခါ __CHONE ()) ကိုကိုယ်တိုင်ကိုယ်ကျမိတ္တူကူးယူရန်စဉ်းစားနိုင်သည်။
သင်၏စီမံကိန်းတွင်အရာဝတ်ထုများကိုသင်မကြာခဏကူးယူရန်လိုအပ်ပါကကိရိယာအတန်းကိုသင် encapsulate လုပ်နိုင်သည်။
class ObjectHelper
{
public static function deepCopy(object $object): object
{
return unserialize(serialize($object));
}
}
ထို့နောက်ခေါ်ဆိုသည့်အခါ၎င်းသည်ရှင်းလင်းသည်။
$copy = ObjectHelper::deepCopy($user);
အကယ်. သင်စိတ်ဝင်စားပါကဤကိရိယာသည်ဤကိရိယာကို composer package တစ်ခုအဖြစ်ပုံနှိပ်ထုတ်လွှင့်နိုင်သည် ။
PDostatement တွင်နက်ရှိုင်းစွာပွားခြင်း --: Fetchobject () ကိုအကောင်အထည်ဖော်ရန်အကောင်းဆုံးသောလှည့်ကွက် :: Fetchobject () သည် အရာဝတ်ထုတစ်ခုစီကို 0 င်ရောက်စွက်ဖက်ခြင်းမပြုရန်သေချာစေရန် Serialization ကို ပေါင်းစပ်ရန်ဖြစ်သည်။ စွမ်းဆောင်ရည်နှင့်အရာဝတ်ထုဖွဲ့စည်းပုံကန့်သတ်ချက်များကိုအာရုံစိုက်ရန်လိုအပ်သော်လည်းအသေးစားနှင့်အလတ်စားစီမံကိန်းများတွင်ဤနည်းလမ်းသည်ရိုးရှင်းပြီးထိရောက်ပြီးအလွန်လက်တွေ့ကျသည်။
သင်ပိုမိုကောင်းမွန်အောင်ပြုလုပ်လိုပါကရောင်ပြန်ဟပ်မှုအပေါ် အခြေခံ. စိတ်ကြိုက်ပတံပင်းမဟာဗျူဟာများကိုလည်းလေ့လာနိုင်သည်။ သို့သော်၎င်းသည်နောက်ထပ်ခေါင်းစဉ်တစ်ခုဖြစ်သည်။