Должен ли конструктор делать больше, чем просто создавать экземпляр? - PullRequest
0 голосов
/ 05 февраля 2019

Пытаясь понять и использовать ООП в PHP, у меня есть класс с именем dbcon.Я следую учебнику в YouTube, который использует защищенную функцию connect() для подключения к БД.Теперь мой вопрос: почему бы не подключиться к БД в конструкторе?

function __construct() {
      $this->DBSERVER  = "localhost" 
      $this->DBUSERNAME = "root" 
      $this->DBPASSWORD = "" 
      $this->DBNAME    = "thedb" 

      $conn = new mysqli($this->DBSERVER, $this->DBUSERNAME, $this->DBPASSWORD, $this->DBNAME);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }     
      return $conn;
    } 
    }

Может кто-нибудь дать мне знать, в чем польза или недостаток этого?

<?PHP
class dbcon {
    private $DBSERVER;
    private $DBUSERNAME;
    private $DBPASSWORD;
    private $DBNAME;

    protected function connect(){
      $this->DBSERVER   = "localhost" 
      $this->DBUSERNAME = "root" 
      $this->DBPASSWORD = "" 
      $this->DBNAME     = "thedb" 

      $conn = new mysqli($this->DBSERVER, $this->DBUSERNAME, $this->DBPASSWORD, $this->DBNAME);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }     
      return $conn;
    }
}
?>

1 Ответ

0 голосов
/ 05 февраля 2019

Первая мысль о том, что это может быть трудно для юнит-теста.Каждый раз, когда вы создаете экземпляр из этого класса, ДОЛЖНА быть база данных, к которой вы можете подключиться, иначе она не сможет работать.

Конечно, метод connect () все еще сложно протестировать, но вы можете протестироватьотдыхайте легко.

Существует метод для вызова метода и создания экземпляра класса в одной строке:

($myDBInstance = new dbcon("localhost", "mirko", "mysecret", "mydb"))->connect();

Другой способ - вызвать статический метод, который делает егоЯсно, это автоматически соединяется, если вам не нравится вышеуказанное решение:

$myDBInstance = dbcon::getInstanceAndConnect("localhost", "mirko", "mysecret", "mydb");

, которое может выглядеть так:

public static getInstanceAndConnect(a,b,c,d) {
     $mydbcon=new dbcon(a,b,c,d);
     $mydbcon->connect();
     return $mydbcon;
}

извините за ленивые аргументы: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...