PHPでカラム名をキーとしたオブジェクトとして結果を受け取る
PHPでカラム名をキーとしたオブジェクトとして結果を受け取る
fetchAllを呼び出したすぐ後にPersonの名前空間に変換される
もしデータベースのカラム名がsnake caseなら、ASで名前規則を変えておくといいかも
code:php
class Person {
public string $sex;
public string $name;
public array $urls;
function __construct(array $urls) {
$this->urls = $urls;
}
}
$stmt = $pdo->prepare("SELECT sex_type AS sex, person_name AS name FROM person ORDER BY id DESC;");
$stmt->execute();
echo "sex: $r->sex, name: $r->name\n";
}
プログラムの中での表現に変換したいという需要がある
code:php
enum Sex: string {
case Female = "f";
case Male = "m";
}
PDO::FETCH_FUNC
ただし、関数をそのまま渡せない
文字列で渡す
う~ん
dataclassと組み合わせてさらに短く書けそう
code:php
$stmt = $pdo->prepare("SELECT sex_type AS sex, person_name AS name FROM person ORDER BY id DESC;");
$stmt->execute();
enum Sex: string {
case Female = "f";
case Male = "m";
}
class Person {
public Sex $sex;
public string $name;
function __construct(...$row) {
}
function greet() {
$sex = match ($this->sex) {
Sex::Female => "female",
Sex::Male => "male",
};
echo "hi! i'm $this->name, $sex\n";
}
}
function convert($sex, $name) {
$convertedSex = match ($sex) {
'f' => Sex::Female,
'm' => Sex::Male,
};
return new Person($convertedSex, $name);
}
foreach($stmt->fetchAll(PDO::FETCH_FUNC, 'convert') as $r) {
$r->greet();
}
code:plain
hi! i'm doh, male
hi! i'm nancy, female
hi! i'm alice, female
hi! i'm bob, male