0 レビュー
1 回答
php-別のクラスからMySQLi接続にアクセスする
これは私のファイルのATMです: --class.core.php --class.site.php --global.php
コアからサイトへのDB接続にアクセスしようとしています。私はすべてを試しましたが、何も機能しません。
class.core.php:
class Core {
public $db;
public $host = "localhost";
public $username = "root";
public $password = "***";
public $dbname = "***";
public function __construct() {
$this->db = new mysqli($this->host, $this->username, $this->password, $this->dbname);
if($this->db->connect_errno) {
echo $this->db->connect_error();
die();
}
return $this->db;
}
}
class.site.php:
class Site {
public $db;
public function __construct(Core $db) {
$this->db = $db->db;
}
}
global.php:
require_once("_classes/class.core.php");
require_once("_classes/class.site.php");
$core = new Core();
$site = new Site();
私は得ることができるすべての助けが必要です。ありがとう:)
わからない
0
レビュー
答え :
解決策:
コンストラクターの動作を誤解していると思います。まず第一に、コンストラクターは何も返さないので、コンストラクターから何かを返さないでください。何も返さない(試したことはない)のですが、見た目がおかしいだけです。
次に、依存性注入の背後にあるアイデアをほぼ理解しました...サイトにはDBが必要です。次に、次のようなコンストラクターを介してDBを注入します。
$core = new Core();
$site = new Site($core->db);
サイトが機能するためにコアを必要とするのではなく、何もせずに多くを必要としないように注意してください。代わりにmysqliが必要です。それが必要なためです...
class Site {
public $db;
public function __construct(mysqli $db) {
$this->db = $db;
}
}
これにより、依存関係が少し分離され、コードが可能な限り解かれます。
最後になりましたが、die()/ exit()の使用を避け、例外を使用して、それらを適切に処理してください。ダイはユーザーにとって非常に非人格的で、見栄えがよくありません。例外をスローして美しい方法で処理することにより、データベースの問題などの例外を正しく処理します。
それ以外の場合、現在のコードが機能しない理由はありません。それは機能しない他の何かであり、私たちはそれを見ることができません!
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。