Вот начал разбираться в ООП, решил первым написать класс для работы с бд PHP: public function __construct($connect=true) { include ("configs\conf.php"); // тут масив $config с параметрами подключения $hostname=$config['host']; $dbuser=$config['db_user']; $dbpassword=$config['db_password']; $selectdb=$config['db_select']; на данном этапе все корректно дальше метод соединения с базой public function Open() { и вот тут проблема для использования функции внутри метода Код (Text): $this->mysql_link = @mysql_connect ($hostname, $dbuser, $dbpassword); $hostname, $dbuser, $dbpassword нужно получить с конструктора, как это сделать? погуглил пробовал что-то вроде $hostname=$this->hostname; но это не правильно подскажите)
в конструкторе тоже сделайте $this->hostname=$config['host']; и в mysql_connect ($this->hostname, и @ не ставьте
Сделай отдельный класс конфигурации БД PHP: <?php class dbCfg { static $HOST = 'localhost'; static $USER = 'root'; ... }
[vs] Может тогда лучше отдельный файл настроек, в котором объявляются константы? PHP: mysql_connect(MYHOST, MYUSER, MYPWD);
ИМХО создавать класс в РНР по аналогии структуры в С++ — бессмысленно. Даже контейнер создавать бессмысленно. А конфиги из конструктора получить очень и очень просто: PHP: <?php class Database { // Контейнер с данными protected $__containter = array(); /** * Получаем и сохраняем конфиги */ public function __construct($dbhost, $dbusr, $dbpass, $dbname) { if(func_num_args() == 4) { $this->__containter = func_get_args(); } else echo "Invalid arguments have been passed"; } /** * Подключаемся к БД * Конфиги у нас получены из конструктора */ public function Connect() { // Для теста мы только вернем return $this->__containter; // А так тут было бы mysql_connect( .. ) } }; $db = new Database("localhost", "root", "password", "test"); echo '<pre> ' . print_r($db->Connect(), true); ?>
Нет конечно. Во первых нужно делегировать выборку конфигурационных данных или сохранять их классу моделей а не вставлять в вызове, как в Вашем случае. И сразу заметно, что для изменения параметров соединения, я даже не представляю, придётся лазить по всем скриптам и искать контроллер который инициировал вызов $db = new Database("localhost", "root", "password", "test"); - децентрализация конфигурационных данных - это не есть гут! В Вашем случае сильно повышается "связность" - это ещё один большо минус! Самый верный вариант это с отдельным файлом.
bxN5 Почитайте или посмотрите паттерн Singlton он хорошо скрывает параметры и автоматизирует кстати вызов connect
1) Не дублируйте переменные. После include весь массив в вашем распоряжении. 2) Для хранения настроек в свое время были придуманы ini-файлы. В пхп есть удобные функции для работы с ними. Либо xml. 3) Создайте переменные класса и в конструкторе записывайте в них настройки. Например: PHP: private $_hostname; Теперь из любой функции эта переменная доступна так: PHP: $hostname=$this->_hostname; Удачных познаний.
Animi По-моему подключить php файл вида: PHP: <?php $host="myhost"; $user="myuser"; ... или такого: PHP: <?php define("HOST","myhost"); ... удобнее чем дергать ini файл. И редактировать легче. Ну и не забываем про проблемы прямого вызова ini файлов.
Чем удобнее? Для новичка да и для более опытного программиста есть несколько возможных проблем: 1) В конфигурационном-php файле имена переменных могут совпадать с теми, что уже были использованы в функции. Тогда жди проблем и без дебаггера может быть туго. 2) include, include_once, require, require_once. Стоит хорошо разобраться с этими функциями, если конфигурационный файл будет использоваться не раз. Чем легче редактировать php файл, нежели ini? Расскажите о проблемах подробнее, пожалуйста.
1)include используется чаще, чем parse_ini_file, потому более знакома. 2)У ini файлов свой синтаксис, который придется учить. 3)Не все редакторы хорошо подсветят ini файл. Префиксы и пространства имен должны помочь. С этими конструкциями по-любому стоит хорошо разобраться. Если в адресной строке набрать имя файла, то php просто выполниться, а ini файл отобразится(или его предложат скачать). Да, можно этого избежать, но это дополнительные телодвижения, которые могут понизить удобство использования.