複数のオブジェクトを作成せずに、自分のデータベースに接続する関数を呼び出せるようにしたいと思います。私は基本的に他のクラスの構築関数を呼びたいと思っています。 のようになります。このofcourseのクラスOOPでデータベース接続関数を呼び出す方法は?
class Database{
public function __construct(){
$this->conn = new mysqli("host", "user", "password", "db");
// Check connection
if (!$this->conn) {
die("Connection failed: ".mysqli_connect_error());
}
}
}
class User{
// call Database->__construct();
}
class OtherClass{
// call Database->__construct();
}
行く方法はありませんが、私は実際に実行可能な方法だろうかわかりません。
これはうまくいくと思いました。 接続
class Database{
public function __construct(){
$this->conn = new mysqli("host", "user", "password", "db");
// Check connection
if (!$this->conn) {
die("Connection failed: ".mysqli_connect_error());
}
}
}
class User{
$conn = new Database();
}
Dependecy注射またはコンストラクタインジェクションを構築するために、クラスに新しいデータベースオブジェクトを作成しない素敵な解決策のように思えます。しかし、私はそれがこのような何かのために作られているかどうか、それを適用する方法を知りません。私は別のモデルクラス
class User{
private $db;
public function __construct() {
$this->db = DBConnection::getInstance();
}
public function getUsers(){
//....................
//....................
//$sql =
$query = $this->db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$query->execute();
$customers = $query->fetchAll();
//return .........
}
あなたは純粋なOOPの方法をしたい場合に使用していますどのように私は
class DBConnection{
protected static $db;
private function __construct() {
try {
self::$db = new PDO('mysql:host=localhost;dbname=db_abc', 'root', '');
//self::$db = new PDO('mysql:host=localhost;dbname=db_phonebook', 'root', 'QAZwsx2016!');
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo "Connection Error: " . $e->getMessage();
}
}
public static function getInstance() {
if (!self::$db) {
new DBConnection();
}
return self::$db;
}
public function __destruct() {
$db=NULL;
}
}
そして、ここで接続
のためにやっているものをここでclass Database{
public function connection(){
$this->conn = new mysqli("host", "user", "password", "db");
// Check connection
if (!$this->conn) {
die("Connection failed: ".mysqli_connect_error());
}
}
}
class User{
private $db;
public function __construct(Database $conn){
$this->db = $conn;
}
}
接続を確立して、どこにでもクラスを使用するシングルトンクラスを作成します。あなたはインスタンス化する必要はありませんので、静的として定義します。 – webDev
@webDevが本当に感謝していますが、シングルトンクラスのサンプルを投稿してdb接続を確立することはできますが、シングルトンクラスで何を意味するのか分かりません。そしてあなたはそれをどのように呼ぶでしょう。 – Jelbow
この例を見てください:https://sourcemaking.com/design_patterns/singleton/php/1あなたはそれを理解する時間が必要です。簡単な方法は、PHPスクリプトの開始時にデータベーススコープの変数$ databaseをデータベース接続で初期化し、それをすべての場所で使います。何故なの?非常にうまく動作します。 –