交换变量的最好和最简单的方法是什么?
我有一个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
变量。
任何想法?也许是关于数组的?
即使可以使用{}
,如
${'dbHost' . $siteState} = '...';
我强烈建议您查看数组:
$options = array(
'Online' => array('host' => '...', 'username' => '...'),
'Test' => array('host' => '...', 'username' => '...'),
);
$current = $options[$siteState];
您可以非常简单地在db.php中对$siteState进行切换,并为每种情况定义$dbHost, $dbPassword:
switch ($sitestate)
{
case 'testing':
$dbHost = '...';
$dbUser = '...';
...
break;
case 'online':
$dbHost = '...';
$dbUser = '...';
...
break;
...
}
从那里所有的脚本使用$dbHost, $dbPass等变量,这将根据您所设置的$siteState而改变。这很容易添加/删除不同的状态,并且避免了数组的额外开销,因为您将需要在线访问一组$db变量。
编辑
另一种可能更好的定义该数据的方法是在db连接数据不会改变的情况下使用常量,即:
case 'testing':
define('DB_HOST', '...');
define('DB_USER', '...');
我认为这是研究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的回答,抱歉。
永远不要使用全局变量。从不。踢每一个,谁会建议你使用全局变量。所有的常量都应该在类中声明,类将使用这些常量(并且它们可以被其他类访问)。
为了不使用"include",你可以学习如何使用名称空间和自动加载:http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1
在您的情况下,您可以使用不同的类进行测试。