在PHP中替换变量

时间:2011-08-06 06:58:00

标签: php variables

交换变量的最佳和最简单的方法是什么?

我有一个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";

因此,当我在db.php中选择$siteState = "Testing"时,它会选择$dbHostTest$dbUsernameTest$dbPasswordTest变量。

有什么想法吗?有阵列的东西可能吗?

4 个答案:

答案 0 :(得分:3)

尽管可以使用{}之类的

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

我强烈建议您查看数组:

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

$current = $options[$siteState];

答案 1 :(得分:1)

你可以简单地在$ siteState上的db.php中进行切换,并为每种情况定义每个$ dbHost,$ dbPassword:

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

从那里开始,所有脚本都使用$ dbHost,$ dbPass等变量,这些变量将根据您设置的$ siteState而变化。这很容易添加/删除不同的状态,并且避免了数组的额外开销,因为您将需要在线上访问$ db变量集。

修改

定义此数据的另一种可能更好的方法是使用常量,因为数据库连接数据不会改变,即:

case 'testing':
    define('DB_HOST', '...');
    define('DB_USER', '...');

答案 2 :(得分:0)

我认为这是查看switch语句的最佳时机! 只是switch()PHP文档(link)的标准链接。

代码示例:

<强> 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;
    }
?>

在发布之前没有看到Stephen Wood的回答,抱歉。

答案 3 :(得分:-2)

永远不要使用全局变量。的 NEVER 即可。踢每个人,他们会建议你使用全局变量 所有常量都应该在类中声明,这些常量将使用这些常量(并且它们可以被其他类访问) 要不使用“include”,您可以学习如何使用命名空间和自动加载:http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1
在您的情况下,您可以使用不同的类进行测试。