Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

[PHP] Нужно упростить класс

Статус пользователя default1k
сообщение 18.8.2015, 13:11
Сообщение #1
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Всем привет. Как можно упростить данный класс, при этом чтобы данные о БД были защищены.

Код

Код
class MYSQL{
        
    private $DBHOST = "localhost";
    private $DBNAME = "site";
    private $DBUSER = "root";
    private $DBPASS = "228";
    
    function __construct(){
    global $dbh;
    
    try{
        $dbh = new PDO('mysql:host='.$this->DBHOST.';dbname='.$this->DBNAME, $this->DBUSER, $this->DBPASS);
        $dbh->query("SET NAMES utf8");
    }
        
    catch(PDOException $e){
        die("Ошибочка: ".$e->getMessage());
    }
    }
    
    function query($query){
        global $dbh;
        return $dbh->query($query);
    }
    
    function fetch(){
        global $dbh;
        return $dbh->fetch();
    }
}



Отредактировал: default1k, - 18.8.2015, 13:15
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя onotole
сообщение 18.8.2015, 16:52
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Забыть про глобальные переменные!!!!!!!!! Это раз. Два. В классе можно определить свойство, которое будет использоваться во всём классе и/или в его потомках
Cкрытый текст
Код:
class MYSQL{

private $DBHOST = "localhost";
private $DBNAME = "site";
private $DBUSER = "root";
private $DBPASS = "228";
private $instance;

function __construct(){
try{
$this->instance = new PDO('mysql:host='.$this->DBHOST.';dbname='.$this->DBNAME, $this->DBUSER, $this->DBPASS);
$this->instance->query("SET NAMES utf8");
}

catch(PDOException $e){
die("Ошибочка: ".$e->getMessage());
}
}

function query($query){
return $this->instance->query($query);
}

function fetch(){
return $this->instance->fetch();
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя default1k
сообщение 18.8.2015, 18:06
Сообщение #3
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

onotole, спс) А можно сделать так, чтобы не создавать методы (query,fetch) в классе MYSQL, а использовать методы класса PDO напрямую ($MYSQL->instance->query, MYSQL->instance->fetch и т.д) Для этого нужно сделать клонирование класса PDO?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 18.8.2015, 21:10
Сообщение #4
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

default1k,
если класс такой мленький, чего не использовать просто php код или функцию?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя default1k
сообщение 18.8.2015, 22:02
Сообщение #5
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Orty_Hart, как тогда защитить данные от БД от просмотра или изменения в коде?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 19.8.2015, 8:27
Сообщение #6


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(default1k @ 18.8.2015, 19:02) *
onotole, спс) А можно сделать так, чтобы не создавать методы (query,fetch) в классе MYSQL, а использовать методы класса PDO напрямую ($MYSQL->instance->query, MYSQL->instance->fetch и т.д) Для этого нужно сделать клонирование класса PDO?

Создай метод query() в нем вызывай pdo'шный. Но я бы посоветовал лучше в классе подготовить кверибилдер хороший.

Цитата(default1k @ 18.8.2015, 22:58) *
Orty_Hart, как тогда защитить данные от БД от просмотра или изменения в коде?

Что именно защитить? От какого просмотра и изменения?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя default1k
сообщение 19.8.2015, 10:51
Сообщение #7
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

onotole, забей :D А насчет квербилдера спасибо, но я пока запросами напрямую побалуюсь :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя jtiq
сообщение 19.8.2015, 18:03
Сообщение #8


Иконка группы

Стаж: 18 лет

Сообщений: 1717
Благодарностей: 767
Полезность: 979

Меценат Меценат

Cкрытый текст
Код
Class MYSQL {
  private $DBHOST = "localhost";
  private $DBNAME = "site";
  private $DBUSER = "root";
  private $DBPASS = "228";
  private $dbh = null;

  function __construct() {
    try {
      $this->dbh = new PDO('mysql:host='.$this->DBHOST.';dbname='.$this->DBNAME, $this->DBUSER, $this->DBPASS);
      $this->dbh->query("SET NAMES utf8");
    } catch(PDOException $e) {
      die("Ошибочка: ".$e->getMessage());
    }
  }

  function query($query) {
    return $this->dbh->query($query);
  }

  function fetch() {
    return $this->dbh->fetch();
  }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя onotole
сообщение 19.8.2015, 19:11
Сообщение #9


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(jtiq @ 19.8.2015, 18:58) *
Cкрытый текст
Код
Class MYSQL {
  private $DBHOST = "localhost";
  private $DBNAME = "site";
  private $DBUSER = "root";
  private $DBPASS = "228";
  private $dbh = null;

  function __construct() {
    try {
      $this->dbh = new PDO('mysql:host='.$this->DBHOST.';dbname='.$this->DBNAME, $this->DBUSER, $this->DBPASS);
      $this->dbh->query("SET NAMES utf8");
    } catch(PDOException $e) {
      die("Ошибочка: ".$e->getMessage());
    }
  }

  function query($query) {
    return $this->dbh->query($query);
  }

  function fetch() {
    return $this->dbh->fetch();
  }
}

Во-первых, чем это отличается от моего кода, не считая имени свойства?
Во-вторых. Свойство класса, которому не задано значение, по-умолчанию равняется null
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: