【问题标题】:How can I call Connection Class from another class?如何从另一个类调用连接类?
【发布时间】:2017-05-15 08:50:46
【问题描述】:

如何调用 DbConnect 类并将其用于另一个类,例如 FormElement 类?

main.class.php

class DBCONNECT
{
   public $dbConnection;

   public function __construct($dbHost, $dbUsername, $dbPassword, $dbName){

       $this->dbConnection = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);

       if($this->dbConnection->error){
           trigger_error("Sorry couldn't connect to database :("); // problem connect to database
       }else{
           return true; // connection successfully
       }
    }
}

我的另一堂课是

element.class.php

class FormElement
{
   public function getCmbPovinsi(){
    $userSqlQuery   = "SELECT id,provinsi FROM aud_provinsi ORDER BY provinsi";
    $userSys        = $this->dbConnection->query($userSqlQuery) or die($this->dbConnection->error);

    if ($userSys) {
        /* checking for available users */
        if($userSys->num_rows > 0){
            echo'<div class="col_one_fourth">
                    <label for="provinsi">Provinsi<small>*</small></label>
                        <select id="provinsi" name="provinsi" class="sm-form-control required">
                            <option value="">-- Pilih Provinsi --</option>';

                    while ($userResult = $userSys->fetch_assoc()) {
                        echo '<option value="'.$userResult['id'].'">'.$userResult['provinsi'].'</option>';          
                    }
                    echo '</select>
                 </div>';
        }else{
            echo "Error Handling!!";
        }
    }else{
        echo "invalid query : ".$this->dbConnection->error."<br>";
        echo "whole query : ".$userQuery ."<br>";
    }               
  }
}

以及这段代码如何正常工作?

【问题讨论】:

  • 从:什么是依赖注入?开始

标签: php database class mysqli connection


【解决方案1】:

在 element.class.php 中首先需要 main.class.php PATH。

# element.clas.php #

require 'main.class.php';

class FormElement
{
  protected $connection;

   public function __construct(DBCONNECT $connection)
   {
     $this->connection = $connection;
   }

   public function getCmbPovinsi()
   {
     ...
     $this->connection->query(...);
   }

}

这种方法称为依赖注入。现在当你想使用元素时,你可以像这样创建一个对象:

$element = new FormElement(new DBCONNECT("host", "username", "password", "db"));

【讨论】:

  • 但是我在解析“调用未定义的方法 DBCONNECT::query()”时遇到了一些错误,你能给我一些关于这个问题的例子吗?谢谢
  • 因为现在它搜索所有的DBCONNECT方法来找到一个查询方法,当找不到它时,抛出一个错误。您可以在 DBCONNECTION 中定义一个查询方法来完成这项工作。
  • 感谢您的解释@hamed :)
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
相关资源
最近更新 更多