不同文件的类方法

时间:2013-08-22 21:11:09

标签: php

我试图将一个常用的方法(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上用于查看记录的一个示例函数。见图。乙

    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();

所以我们在这里。逻辑很简单(如果我不太清楚的话,我会更新问题)那么有人会建议我需要哪些修改才能使呼叫正常运行吗?

3 个答案:

答案 0 :(得分:2)

Orangepill的解决方案很好,很可能会让你快速前进。但是,我建议您对课程进行一些小修改,以便您更轻松地在整个课程中重复使用其功能。

此处,qcon保存您的数据库连接信息和功能。它有一个getter方法getConn(),允许你获取,并根据需要传递该连接。

class qcon
{
    protected $conn;

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

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

以下是替代dbcats类的示例。它将qcon类作为其构造的一部分,并将其作为受保护的成员变量保存,以便在需要时可以使用它。它还具有getter和setter,以便您可以通过getQConn()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; }
}

这可能不是最快的解决办法,但我相信这样的做法从长远来看会对你有所帮助。

答案 1 :(得分:0)

从我所看到的,你在两个课程中都缺少最后的花括号}。如果正确缩进,一切都会更容易看到。也就是说,每次你有一个左大括号{下面的行将缩进一个标签。像这样:

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

答案 2 :(得分:0)

您需要将qcon类的实例注入dbcats类。

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

class dbcats {
  var $conn;
  public function __construct(qcon $dbconn){
      $this->conn = $dbconn;
  }
  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);
         }
  }

然后当你在conn的实例中创建一个dbcats传递实例时...

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