PHP Получение переменной по имени и конкатенации - PullRequest
0 голосов
/ 30 сентября 2011

У меня проблема с получением переменной по имени. То, что я делаю, включает в себя путь с соединениями, и я хочу, чтобы соединения были названы определенным образом. Я хочу перебрать эти соединения и добавить их в очередь, но проблема в том, что я не могу использовать '.' объединить переменную.

Код выглядит следующим образом. Файл конфигурации:

//Set the host the databse will connect too
    $config_db_hostname='xxx.xxx.xxx';
    //Set the user who is connecting to the database
    $config_db_user='a user';
    //Set the password for user who is connecting to the database
    $config_db_pass='abc123';
    //Set the database type
    $config_db_type='mysql';
    //Set the name of the database
    $config_db_name='phonephare_development';
    //Optional: Set the schema, if any
    $config_db_schema='';
    //Optional: Set the port, otherwise default port will be used
    $config_db_port='';
    //Set the prefix for the table names
    $config_db_prefix='pf_';

    //Set the host the databse will connect too
    $config_db_hostname_1='localhost';
    //Set the user who is connecting to the database
    $config_db_user_1='test';
    //Set the password for user who is connecting to the database
    $config_db_pass_1='test';
    //Set the database type
    $config_db_type_1='mysql';
    //Set the name of the database
    $config_db_name_1='test_development';
    //Optional: Set the schema, if any
    $config_db_schema_1='';
    //Optional: Set the port, otherwise default port will be used
    $config_db_port_1='';
    //Set the prefix for the table names
    $config_db_prefix_1='pv_';

Функция для получения значений:

public static function init(){
        if(file_exists(PV_DB_CONFIG)){
            include(PV_DB_CONFIG);


            for ($i = 0; $i <= 3; $i++) {
                if($i){
                    $profile_id='_'.$i;
                } else {
                    $profile_id='';
                }
                // Database variables
                self::$connections['connection'.$profile_id]['dbhost'] = ($config_db_hostname.$profile_id);
                self::$connections['connection'.$profile_id]['dbuser'] = $config_db_user.$profile_id;
                self::$connections['connection'.$profile_id]['dbpass'] = $config_db_pass.$profile_id;
                self::$connections['connection'.$profile_id]['dbtype'] = $config_db_type.$profile_id;
                self::$connections['connection'.$profile_id]['dbname'] = $config_db_name.$profile_id;
                self::$connections['connection'.$profile_id]['dbport'] = $config_db_port.$profile_id;
                self::$connections['connection_'.$profile_id]['dbschema'] = $config_db_schema.$profile_id;
                self::$connections['connection_'.$profile_id]['dbprefix'] = $config_db_prefix.$profile_id;
            }

        }

}//end init

Так как я могу динамически читать эти переменные?

Ответы [ 3 ]

4 голосов
/ 30 сентября 2011

Вы можете читать «динамические» переменные следующим образом:

$varname = 'config_db_user';
if ($i)
  $varname .= '_' . $i;

$varvalue = $$varname; // $varvalue contains the value now.

Но это сделает ваш код действительно трудным для чтения и поддержки. Скорее сделайте ваш конфиг так:

$profiles[1]['config_db_user'] = 'whatever';

Тогда вы можете просто прочитать $profiles[$profile_id]['configfield], чтобы получить то, что вы хотите. Возможно, есть и другие способы, которые могут быть даже лучше, но прекратите составлять имена динамических переменных, потому что это хуже всего.

2 голосов
/ 30 сентября 2011

Проверка PHP переменные переменные .

Примечание: для начала это плохой формат файла конфигурации, вам действительно следует размещать отдельные соединения в разных массивах. Проверьте файл конфигурации phpmyadmin.

1 голос
/ 30 сентября 2011

Создайте свои данные по-другому. Вы хотите перебрать группу переменных с одинаковым именем ... но вам не приходило в голову использовать массив для параметров конфигурации и перебирать это?

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