[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по поводу __construct()
balambasik
Доброго дня/ночи.

В ООП не силен.
Хочу узнать про метод __construct(), а вернее узнать правильно ли я его использую.

Например есть класс для работы с БД. Настройки хранятся в отдельном txt файле.

И я делаю так:

class db_class
{
function __construct()
{
// грузим файл с настройками
$file = file_get_contents('conf_db.txt');

// бла бла бла. как-то парсим значения настроек из файла
//.......

// назначаем константы

define("MYSQL_HOST", $file['server']); // имя сервера
define("MYSQL_USER", $file['user']); // имя пользователя
define("MYSQL_PASSWDORD", $file['pass']); // пароль

}


function db_connect()
{
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWDORD);

//.......
}
}



Это правильное использование __construct() или это г@внокод? Спасибо за ответы.

waldicom
Можно, конечно, и так. Но и иногда параметры передают в конструтор. Говорят, что так лучше. Потому что зачем классу db_class жестко данные прописывать.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
volter9
balambasik
Ну я бы сказал что __construct у Вас работает. waldicom верно подметил, у Вас получается очень жестко прописанные данные в классе + константы определение констант которые не позволят Вам использовать заново этот класс.

Можете поступить так:
1. Задать один аргумент в конструктор который будет указывать путь к файлу.
2. В конструкторе загружать данные и класть их в приватное/публичное (как Вам удобно) свойство.
3. В db_connect используйте данные из свойства.

Как то так на коде:
class db {
private $config;
private $link;

public function __construct ($file) {
$file = file_get_contents($file);

// Парсинг...

$this->config = $file;
}

public function connect () {
$user = $this->config['user'];
$host = $this->config['server'];
$pass = $this->config['pass'];

$this->link = mysql_connect($host, $user, $pass);
}
}


P.S.: Как бы mysql_* функции устаревшие, можете попробовать PDO или mysqli
P.S.S: Можно воспользоваться PHP файлами что бы не делать парсинг
типа так
main_db.php:
<?php

return [
'user' => 'root',
'pass' => '',
'server' => 'localhost'
];


Сам класс:
class db {
private $config;
private $link;

public function __construct ($file) {
$this->config = require $file;
}

public function connect () {
$user = $this->config['user'];
$host = $this->config['server'];
$pass = $this->config['pass'];

$this->link = mysql_connect($host, $user, $pass);
}
}


_____________
Мой блог
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.