Подстановочные переменные в PHP - PullRequest
1 голос
/ 06 августа 2011

Какой самый лучший и простой способ поменять переменные?

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

Пример:

global.php

$siteState = "Online";
//$siteState = "Testing";
//$siteState = "Local";

db.php

$dbHostOnline = "123.321.123.321";
$dbUsernameOnline = "root";
$dbPasswordOnline = "asdf";
$dbHostTest = "localhost";
$dbUsernameTest = "test";
$dbPasswordTest = "fdsa";
$dbHostLocal = "localhost";
$dbUsernameLocal = "root";
$dbPasswordLocal = "dsaf";

Итак, когда я выбираю $siteState = "Testing" внутри db.php, он выбирает $dbHostTest, $dbUsernameTest и$dbPasswordTest переменные.

Есть идеи?Может быть, что-то с массивами?

Ответы [ 4 ]

3 голосов
/ 06 августа 2011

Даже если это возможно сделать с помощью {}, как

${'dbHost' . $siteState} = '...';

, я настоятельно рекомендую вам взглянуть на массивы:

$options = array(
    'Online' => array('host' => '...', 'username' => '...'),
    'Test' => array('host' => '...', 'username' => '...'),
);

$current = $options[$siteState];
1 голос
/ 06 августа 2011

Вы можете просто сделать переключение в db.php на $ siteState и определить каждый из $ dbHost, $ dbPassword для каждого случая:

switch ($sitestate)
{
    case 'testing':
         $dbHost = '...';
         $dbUser = '...';
         ...
         break;
    case 'online':
         $dbHost = '...';
         $dbUser = '...';
         ...
         break;
    ...
}

И оттуда все сценарии используют переменные $ dbHost, $ dbPass и т. Д., Которые будут меняться в зависимости от того, какой $ siteState вы установили. Это легко добавлять / удалять различные состояния и позволяет избежать дополнительных затрат на массивы, так как вам когда-либо понадобится доступ к набору переменных $ db.

EDIT

Другим, возможно, лучшим способом определения этих данных было бы использование констант, учитывая, что данные соединения БД не изменятся, а именно ::11010*

case 'testing':
    define('DB_HOST', '...');
    define('DB_USER', '...');
0 голосов
/ 06 августа 2011

Я думаю, что это было бы идеальное время, чтобы взглянуть на заявления о переключении! Просто стандартная ссылка на документацию PHP switch () ( ссылка ).

Пример кода:

db.php

<?php
    switch($SiteState){
        case 'Online':
            $dbHost = "123.321.123.321";
            $dbUsername = "root";
            $dbPassword = "asdf";
            break;
        case 'Testing':
            $dbHost = "localhost";
            $dbUsernameOnline = "root";
            $dbPasswordOnline = "asdf";
            break;
        case 'Local':
            $dbHost = "localhost";
            $dbUsernameOnline = "root";
            $dbPasswordOnline = "asdf";
            break;
    }
?>

Не видел ответа Стивена Вуда, прежде чем я написал, извините.

0 голосов
/ 06 августа 2011

Никогда не используйте глобальные переменные. НИКОГДА НЕ .Пинайте каждого, кто порекомендует вам использовать глобальные переменные.
Все константы должны быть объявлены в классах, которые будут использовать эти константы (и они будут доступны для других классов).
И не использовать "include"вы можете узнать, как использовать пространства имен и автозагрузку: http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1
В вашем случае вы можете использовать различные классы для тестирования.

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