1

こんにちは、mysql の代わりに mysqli を使用してコードを再構築しようとしていますが、php クラスの mysql に問題があります。

$db = new mysqli('localhost','user','password','dbname');

require_once('classes/some_class.php');
$some_class = new some_class();

some_class.php で:

 class some_class {
  function __construct() { $db->query('blablabla'); }
 }

これは機能しませんが$db = new ...、some_class.php を追加すると機能します。

そのため、some_class.php はデータベース接続を認識していません:/

4

2 に答える 2

1

some_class() は $db に依存しています。

いくつかのオプションがあります。

依存関係を引数として渡します。

$db = new mysqli('localhost','user','password','dbname');
// that could be in a different file

class some_class {
private $db;
function __construct($db) 
{
$this->db=$db; 
}
// eg - do a query
function getStuff($qry){
$this->db->query($qry); 
}
}

また

あなたが言ったように、someclassにdb接続をインスタンス化させます

また

グローバル変数を使用します。

それぞれについて、長所と短所があります。他の方法もあります。それぞれの意味を本当に理解したい場合は、本当に優れた OOP の本を少なくとも 1 冊見つけることをお勧めします。これは賢い方法ですが、状況ごとに適切な答えを見つけるのは簡単なことではありません。

于 2013-10-05T16:56:01.057 に答える
1

あなたの変数は範囲外です。何がsome_class何で$dbあるかわかりません。$db引数として渡す必要があります。クラスをインスタンス化するときにこれを行うことができます。

$db = new mysqli('localhost','user','password','dbname');

require_once('classes/some_class.php');
$some_class = new some_class($db);
 //Pass $db here -------------^ to the constructor

次に、これが機能します。

class some_class {
    function __construct($db) { $db->query('blablabla'); }
}
//You receive $db here ---^
于 2013-10-05T17:00:51.860 に答える