2

一般的に使用されるメソッド (opendb) を、接続構成ファイル (connect.php) と同じクラスおよびファイルに配置しようとしています。図 A を参照してください。

class qcon{

public static $conn;

    function dbcon()
    {


         if (empty($conn)) 
         {
             $host = 'x';
             $username = 'x';
             $password = 'x';
             $dbname = 'x';
             $conn = mysqli_connect($host , $username  , $password ,$dbname) or die("Oops! Please check SQL connection settings");
         }

         return $conn;
    }


        function openDB($conn) 
    {

    if (!$conn)
    {
        $this->error_msg = "connection error could not connect to the database:! ";  
        return false;
    }
    $this->conn = $conn;
    return true;
    }

ここで、別のクラス ファイルでメソッドを適切に使用できるように、図 A の接続出力を渡すことができるようにしたいと考えています。class.php と呼びます。レコードを表示するための class.php の関数の例を次に示します。図を参照してください。B

    require_once("assets/configs/connect.php"); 

    class dbcats {

var $conn;

      function getResult(){

                $result = mysqli_query($this->conn , "SELECT * from felines" );
                if ($result) {
                    return $result;
                } 
                else {
                    die("SQL Retrieve Error: " . mysqli_error($this->conn));
                }
            }

             function closeDB() {
                                            mysqli_close($this->conn);
                                    }

さて、仕事への呼び出しを取得するために、下の図 C は私がいる場所です。私は少し立ち往生しています。

$db1 = new qcon();
$helper = new dbcats();
$db1->openDB();
$helper = $db1;
$result = $helper->getResult();

ここにいます。ロジックは非常に単純です (よくわからない場合は質問を更新します) 通話を機能させるために必要な修正について、誰かがアドバイスしてくれますか?

4

3 に答える 3

2

Orangepill のソリューションは優れており、すぐに作業を進めることができます。ただし、プログラム全体で機能をより簡単に再利用できるように、クラスにいくつかの小さな変更を加えることをお勧めします。

ここにqconは、データベース接続情報と機能が保持されます。getConn()必要に応じてその接続を取得して渡すことができるgetter メソッドがあります。

class qcon
{
    protected $conn;

    public function __construct() { ... }
    public function dbcon()       { ... }
    public function openDB()      { ... }
    public function closeDB()     { ... }

    public function getConn() { return $this->conn; }
}

dbcats代替クラスの例を次に示します。構築の一部でクラスを取り込み、qcon必要なときにいつでも使用できる保護されたメンバー変数として保持します。getQConn()また、getter と setter も備えているため、 と を介していつでもこのクラスのデータベース接続を変更または取得できますsetQConn()

class dbcats
{
    protected $qcon;

    public function __construct(qcon $q) { $this->qcon = $q; }
    public function getResult()          { ... }
    public function getQConn()           { return $this->qcon; }
    public function setQCon(qcon $q)     { $this->qcon = $q; }
}

これは最速の解決策ではないかもしれませんが、このような慣行は長期的にはより役立つと信じています.

于 2013-08-22T21:41:48.827 に答える
0

私が見ることができることから、両方のクラスで終わりの中かっこ } がありません。インデントを正しく作成すると、すべてが見やすくなります。つまり、左中括弧 { があるたびに、次の行は 1 つのタブでインデントされます。このような:

class qcon {

    public static $conn;

    function dbcon()
    {
         if (empty($conn)) 
         {
             $host = 'x';
             $username = 'x';
             $password = 'x';
             $dbname = 'x';
             $conn = mysqli_connect($host , $username  , $password ,$dbname) or die("Oops! Please check SQL connection settings");
         }

         return $conn;
    }


    function openDB($conn) 
    {
        if (!$conn)
        {
            $this->error_msg = "connection error could not connect to the database:! ";  
            return false;
        }
        $this->conn = $conn;
        return true;
    }
} <<< Missing this one



class dbcats {

    var $conn;

    function getResult(){
        $result = mysqli_query($this->conn , "SELECT * from felines" );
        if ($result) {
            return $result;
        } 
        else {
            die("SQL Retrieve Error: " . mysqli_error($this->conn));
        }
    }

    function closeDB() {
        mysqli_close($this->conn);
    }
} <<< Missing this one
于 2013-08-22T21:14:19.200 に答える