Вынос констант БД вне класса php

Тема в разделе "PHP", создана пользователем guru85, 3 июн 2015.

Статус темы:
Закрыта.
Модераторы: latteo
  1. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    Здравствуйте, помогите пожалуйста, не могу сообразить. есть готовый класс на php в самом начале стоят константы, как бы мне их вынести из этого файла и положить в другой, config.php
    Код:
    class CPayment {
       
        const db_host    = 'localhost';  /** Имя сервера MySQL */
        const db_user = 'user'; /** MySQL database username */
        const db_pass    = 'пасс'; /** MySQL пароль  базы данных*/
        const db_name    = 'имя';  /** Имя базы данных*/
    
    
    смысл в том чтобы не лезть в класс для установки доступов к бд, а делать это в другом файле.
     
  2. KPACHODAP

    KPACHODAP DELETED

    Регистр.:
    21 дек 2009
    Сообщения:
    641
    Симпатии:
    111
    1. Возьми стандартный конфиг с подключением к бд
    2. Убери из класса данные бд
    3. сделай в файле класса или куда класс подлючаеться вверху инклюд конфига!

    Как то так видимо!
     
    Последнее редактирование: 3 июн 2015
  3. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    так ведь функции обращается к этим константам, нет возможности переписать весь класс тем более что функция подключения бд как раз в классе и там много других констант которые так же надо вынести из класса.
     
  4. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    610
    Симпатии:
    348
    Код:
    class YourConfig {
     
        var $db_host    = 'localhost';  /** Имя сервера MySQL */
        var $db_user = 'user'; /** MySQL database username */
        var $db_pass    = 'пасс'; /** MySQL пароль  базы данных*/
        var $db_name    = 'имя';  /** Имя базы данных*/
    }
    class CPayment {
        $yourconfig = new YourConfig();
        const db_host = $yourconfig->db_host;
        const db_user = $yourconfig->db_user;
        const db_pass = $yourconfig->db_pass;
        const db_name = $yourconfig->db_name;
    
    так не вариант?

    а константы вам обязательно использовать? пусть будут переменные да и все. все равно база подключается только один раз при инициализации скриптов
     
    Последнее редактирование модератором: 3 июн 2015
  5. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    syntax error, unexpected '$yourconfig' я так понимаю что константу нельзя переменной объявить, а принцип как раз такой примерно и нужен

    в классе везде используется вот такие строки, если уберу константы придется весь класс переписывать, думал можно как-то решить без исправления, да и не только подключение к бд в классе используют констнаты там еще есть
    Код:
    mysql_connect(self::db_host, self::db_user, self::db_pass);
     
    Последнее редактирование модератором: 3 июн 2015
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    Есть же механизм наследования
    PHP:
    class Config {

      const 
    db_host  'localhost';  /** Имя сервера MySQL */
      
    const db_user 'user'/** MySQL database username */
      
    const db_pass  'пасс'/** MySQL пароль  базы данных*/
      
    const db_name  'имя';  /** Имя базы данных*/
    }

    class 
    CPayment extends Config {
      
    }
     
    guru85 и latteo нравится это.
  7. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    610
    Симпатии:
    348
    а если от этого класса еще идет наследование в клиентские в пользовательские классы? тогда это станет небезопасно
    как вариант, вынести
    Код:
        const db_host    = 'localhost';  /** Имя сервера MySQL */
        const db_user = 'user'; /** MySQL database username */
        const db_pass    = 'пасс'; /** MySQL пароль  базы данных*/
        const db_name    = 'имя';  /** Имя базы данных*/
    в отдельный файл и заинклудить его в классе, так:
    Код:
    class CPayment {
    
    function db_connect_my(){
    require_once('your_config.php');
    ...
    ...
    }
    }
    
     
  8. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    Ваш вариант подходит

    Все сработало, Вы мне очень помогли.
     
    Последнее редактирование: 3 июн 2015
  9. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    почитайте про относительные пути...
    пример CPayment лежит в папке
    /classes/paymant/CPayment.class.php

    а конфиг в папке
    /config/db.php

    тогда в CPayment.class.php мы инклюлим через путь '../../config/db.php'

    Если классов много и подключать их лениво освойте автолоад - http://php.net/manual/ru/language.oop5.autoload.php ;)
     
Статус темы:
Закрыта.