這是我第一次在PHP中創建一個面向對象的站點和一個關於構造函數的問題。在PHP類的構造函數中運行查詢可以嗎?
我有一個用戶登錄後生成的字符類。字符對象將保存遊戲的所有用戶數據。
我的問題是關於構造函數/實例化類。在類構造函數中運行查詢就好了,就像我在附加的代碼中一樣?
當前傳入的參數只是在登錄過程中獲得的用戶名,這是在查詢中運行以獲取字符信息的用戶名。
這是好還是最好的做法是在構造或類之外運行查詢並將參數傳遞給類構造函數?
只是想確保我沒有忽略當前代碼中的任何潛在問題 - 只要將異常考慮在內,應該可以將查詢保留在構造函數中,否?
<?php
include $_SERVER['DOCUMENT_ROOT']."/rx/includes/classes/connection.php";
class Character {
private $charid;
private $userid;
private $username;
private $class;
private $exp;
private $money;
private $attack;
private $defense;
private $hp;
private $turns;
function __construct($data){
$pdo = Connection::getInstance();
try {
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$char = $pdo->prepare("SELECT users.userid, users.username, characters.charid, characters.money, characters.attack, characters.defense, characters.class, characters.hp, characters.userid, characters.turns, characters.exp
FROM characters
JOIN users ON users.userid=characters.userid
WHERE username=?");
$char->execute(array($data));
$res = $char->fetchAll(PDO::FETCH_ASSOC);
$this->charid = $res[0]['charid'];
$this->userid = $res[0]['userid'];
$this->username = $res[0]['username'];
$this->class = $res[0]['class'];
$this->exp = $res[0]['exp'];
$this->money = $res[0]['money'];
$this->attack = $res[0]['attack'];
$this->defense = $res[0]['defense'];
$this->hp = $res[0]['hp'];
$this->turns = $res[0]['turns'];
}
catch (Exception $e){
echo $e;
}
}
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
最好的做法是分開你的邏輯代碼,讓你的方法有一個工作,要麼是查詢或其他任何東西 – hassan
謝謝,現在編輯。 –
https://en.wikipedia.org/wiki/SOLID_(object-oriented_design),這是用於對象的方法 – hassan