在使用 PDO 將其作為類之前,有沒有辦法對字串進行 json 決議?我不喜歡使用聯合型別。
在下面的示例中,資料庫中的聯系人型別為 json。
PDO
$stmt = $DB->prepare("SELECT first_name, last_name, contact FROM users");
$stmt->execute();
$stmt->fetchAll(PDO::FETCH_CLASS, 'User');
用戶類
<?php
class User {
public string $first_name;
public string $last_name;
public string | object $contact;
public function __construct() {
$this->contact = json_decode($this->contact);
}
}
uj5u.com熱心網友回復:
正如 Movahhedi 建議您可以使用PDO::FETCH_FUNC,但json_decode()應該發生在傳遞的函式中,而不是在建構式中。我的建議是創建一個UserFactory具有類似方法的類createFromDbRow(),當然,盡管將其定義為一個裸函式也可以正常作業:
class User {
public string $first_name;
public string $last_name;
public object $contact;
}
class UserFactory {
public function createFromDbRow(string $first_name, string $last_name, string $contact) : User {
$user = new User();
$user->first_name = $first_name;
$user->last_name = $last_name;
$user->contact = json_decode( $contact );
return $user;
}
}
$db = new PDO('sqlite::memory:');
$db->exec('CREATE TABLE "users" ( "id" INTEGER, "first_name" TEXT, "last_name" TExT, "contact" TEXT )');
$db->exec('INSERT INTO "users" VALUES( 1, \'John\', \'Doe\', \'{"email":"[email protected]"}\')');
$db->exec('INSERT INTO "users" VALUES( 2, \'Jane\', \'Doe\', \'{"email":"[email protected]"}\')');
$userFactory = new UserFactory();
$stmt = $db->prepare("SELECT first_name, last_name, contact FROM users");
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_FUNC, [$userFactory, 'createFromDbRow' ]);
var_dump( $users );
由于User屬性都是公開的,我省略了建構式,但您當然也可以定義建構式:
class User {
public string $first_name;
public string $last_name;
public object $contact;
public function __construct(string $first_name, string $last_name, object $contact) {
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->contact = $contact;
}
}
...然后使用建構式創建Users UserFactory::createFromDbRow():
class UserFactory {
public function createFromDbRow(string $first_name, string $last_name, string $contact) : User {
return new User(
$first_name,
$last_name,
json_decode( $contact )
);
}
}
uj5u.com熱心網友回復:
您可以使用FETCH_FUNC
我們定義的函式實際上做了建構式所做的
function customConstruct(first_name, $last_name, $contact) {
return new User($first_name, $last_name, $contact);
}
現在我們這樣做
$stmt = $DB->prepare("SELECT first_name, last_name, contact FROM users");
$stmt->execute();
$stmt->fetchAll(PDO::FETCH_CLASS, 'User');
$results = $stmt->fetchAll(PDO::FETCH_FUNC, "customConstruct");
用戶類
class User {
public string $first_name;
public string $last_name;
public object $contact;
public function __construct($first_name, $last_name, $contact) {
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->contact = json_decode($contact);
}
}
如果您需要一個陣列,請使用:
$this->contact = json_decode($contact, true);
編輯
我們也許可以將新函式放入類中。不過我不是 100% 確定。
class User {
public string $first_name;
public string $last_name;
public object $contact;
public function __construct($first_name, $last_name, $contact) {
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->contact = json_decode($contact);
}
function customConstruct(first_name, $last_name, $contact) {
return new User($first_name, $last_name, $contact);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322931.html
標籤:php
上一篇:如何在陣列值中添加雙引號php
