PHP တွင် PDostatement :: Setchobject :: DetComBod သည် ဒေတာဘေ့စ်စုံစမ်းမှုရလဒ်များမှအရာဝတ်ထုများကိုရယူရန်အတွက်ဘုံနည်းလမ်းဖြစ်သည်။ ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါ, အထူးသဖြင့်လူတန်းစားနှင့်ဒေတာဘေ့စ်မေးမြန်းချက်များကိုကိုင်တွယ်သည့်အခါသင်နှင့်သက်ဆိုင်သည့်ပြ problems နာအချို့ကိုသင်ကြုံတွေ့ရနိုင်သည်။ ဤဆောင်းပါးသည်ဤဘုံ namespace ပြ problems နာများကိုစူးစမ်းလေ့လာပြီးဖြေရှင်းနည်းများပေးလိမ့်မည်။
ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည်မေးခွန်းများကိုအတန်း၏အရာဝတ်ထုများသို့မကြာခဏမြေပုံဆွဲလိုကြသည်။ ဤအချိန်တွင် FetchObject နည်းလမ်းသည်အလွန်အသုံးဝင်သည်။ သို့သော်အချို့ကိစ္စရပ်များတွင်အထူးသဖြင့်အမည်များကိုအသုံးပြုသောအခါအတန်းများကိုမှန်ကန်စွာမြေပုံဆွဲခြင်းမပြုနိုင်သည့်အခြေအနေများကြုံတွေ့ရနိုင်သည်။
ဥပမာအားဖြင့်ကျွန်ုပ်တို့တွင်ဤကဲ့သို့သောကုဒ်ရှိသည်ဆိုပါစို့။
<?php
namespace MyApp\Models;
class User {
public $id;
public $name;
}
// PDO မေးမြန်း
$stmt = $pdo->query("SELECT id, name FROM users");
$user = $stmt->fetchObject('MyApp\Models\User');
?>
ဒီဥပမာကကောင်းကောင်းမွန်မွန်နေပုံရတယ်, ဒါပေမယ့်တကယ်တော့ Namespace ကိုမှန်ကန်စွာကိုင်တွယ်နိုင်ခြင်းမရှိသေးပါက PHP သည်အတန်းကိုရှာမတွေ့နိုင်သည့်အမှားတစ်ခုကိုသတင်းပို့လိမ့်မည်။ အတန်း၏အမည်အပြည့်အစုံကိုမှန်ကန်စွာမဖော်ပြသည့်အခါပြနာသည်များသောအားဖြင့်ဖြစ်လေ့ရှိသည်။
အသုံးပြုသူ အတန်းကို Namespace MyApp \ မော်ဒယ်များ အောက်တွင်သတ်မှတ်ထားပါကကျွန်ုပ်တို့သည် FetchObject Method တွင်အတန်း၏အပြည့်အဝ namespace ကိုအသုံးပြုရန်လိုအပ်သည်။ ဒီလိုမှမဟုတ်ရင် FetchObject က Class ကိုပုံမှန် Namespace ရှိအတန်းအစားကိုရှာရန်ကြိုးစားလိမ့်မည်။
ဖြေရှင်းနည်းမှာအပြည့်အဝ namespace ကိုပေးရန်ဖြစ်သည်။
$user = $stmt->fetchObject('MyApp\\Models\\User');
Namespace တွင် backslashes ( \ ) မှလွတ်မြောက်ရန်လိုအပ်ကြောင်းသတိပြုပါ။
အကယ်. autoloading ယန္တရားကိုမှန်ကန်စွာမသတ်မှတ်ပါက PDostatement :: Fetchobject သည် သတ်မှတ်ထားသောအတန်းကိုရှာမတွေ့ပါ။ PHP ၏ Autoloader သည် SPL_AUTOLOAD_Register function မှတဆင့်အလိုအလျောက် 0 န်ဆောင်မှုပေးသည့်နည်းလမ်းကိုမှတ်ပုံတင်နိုင်သည်။
ဥပမာ Commoser ကိုအသုံးပြုသောအခါ composer.json ဖိုင်တွင် autoload အစိတ်အပိုင်းကိုမှန်ကန်စွာ သတ်မှတ်. Composer.json ဖိုင်တွင်မှန်ကန်စွာ သတ်မှတ်. Composer Dump-autoload command ကိုဖွင့်ပါ။
{
"autoload": {
"psr-4": {
"MyApp\\": "src/"
}
}
}
Autoloader ကိုဖွင့်ထားပြီးသည်နှင့် PHP သည် MyApp \ မော်ဒယ်များကို အလိုအလျောက်ဖွင့်နိုင်သည်။
FetchObjectObject ကို အသုံးပြုသောအခါဒေတာဘေ့စ်စုံစမ်းမှုရလဒ်နှင့်အတန်း၏ attribute name သည်မကိုက်ညီပါ။ ဥပမာအားဖြင့်, ဒေတာဘေ့စ်စားပွဲရှိလယ်ကွင်းသည် user_id ဖြစ်နိုင်သည်, အတန်းထဲတွင်သတ်မှတ်ထားသော attribute သည် ID ဖြစ်သည်။ ယခုအချိန်တွင် Fetchobject ၏ပုံမှန်အပြုအမူသည်ဒေတာဘေ့စ်နယ်ပယ်များကိုအတန်း၏ဂုဏ်သတ္တိများသို့တိုက်ရိုက်မြေပုံရေးဆွဲရန်ဖြစ်သည်။
ဤပြ problem နာကိုဖြေရှင်းရန် Custom Mapping function ကိုသတ်မှတ်ရန်သင်၏ဒုတိယ pareter ကိုသုံးနိုင်သည်။ ဤလုပ်ဆောင်ချက်သည်သင့်အားနယ်ပယ်အမည်များနှင့်လိုအပ်သော attribute အမည်များကိုပြောင်းလဲရန်ခွင့်ပြုလိမ့်မည်။
function mapRowToUser($row) {
$user = new \MyApp\Models\User();
$user->id = $row['user_id'];
$user->name = $row['user_name'];
return $user;
}
$stmt = $pdo->query("SELECT user_id, user_name FROM users");
$users = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$users[] = mapRowToUser($row);
}
ဒေတာဘေ့စ်ရလဒ်များကိုမြေပုံဆွဲရန်သင် Class Payinity ကိုဖန်တီးရန်လိုအပ်ပါကအမည်မသိအတန်းများကိုသင်အသုံးပြုနိုင်သည်။ FetchObject သည် အမည်မသိအတန်းများကိုထောက်ပံ့သော်လည်း Namespace မှန်ကန်မှုသေချာစေရန်လိုအပ်သည်။
$stmt = $pdo->query("SELECT id, name FROM users");
$user = $stmt->fetchObject(function($row) {
return new class {
public $id;
public $name;
};
});
ဤချဉ်းကပ်နည်းသည်နေရာမျိုးစုံဖြင့်ပြန်လည်အသုံးချရန်မလိုအပ်သည့်ရိုးရှင်းသောအရာဝတ်ထုများအတွက်အကောင်းဆုံးဖြစ်သည်။
PDostatement :: Fetchobject သည် US Map Query သည်အရာဝတ်ထုများသို့ဖြစ်ပေါ်စေနိုင်သည့်အလွန်အသုံးဝင်သောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ သို့သော်အမည်များနှင့်ဆက်ဆံရာတွင်အတန်း၏အမည်အပြည့်အစုံကိုမှန်ကန်စွာသတ်မှတ်ထားပြီး PHP သည်အတန်းကိုမှန်ကန်စွာဖွင့်နိုင်သည်ကိုသေချာအောင်ပြုလုပ်ရန်လိုအပ်သည်။ ဒေတာဘေ့စ်လယ်ကွင်းနှင့်မကိုက်ညီသော class name တစ်ခုကြုံတွေ့ရသောအခါဤပြ problems နာများကိုဖြေရှင်းရန်စိတ်ကြိုက်မြေပုံဆွဲခြင်းလုပ်ငန်းကိုသင်အသုံးပြုနိုင်သည်။
ဤဘုံ namespace ပြ problems နာများကိုနားလည်ခြင်းနှင့်ဆက်ဆံခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် Namespace အမှားများကြောင့်ဖြစ်ပေါ်လာသော debugging ပြ problems နာများကိုရှောင်ရှားနေစဉ်ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကို ပိုမိုထိရောက်စွာအသုံးပြုနိုင်သည်။
gitbox.net - Git Repository Management Service
PHP တရားဝင်စာရွက်စာတမ်းများ - PDO နှင့် namespace အကြောင်းပိုမိုလေ့လာပါ