我在所有页面上共享PHP代码库,并为每个HTTP请求共享动态require
"/configs/$site/config.php"
文件。该文件如下所示:
<?php
$SiteConfiguration = [
'site_title => 'Wiki for Developers',
'mysql_host' => 'localhost',
'mysql_db' => 'wiki-devs',
'articles_per_page' => 10,
/* ... etc ... */
];
?>
我面临的问题是我无法从函数中完全访问此变量。
例如:
function DisplayArticles() {
echo "Displaying ".$SiteConfiguration['articles_per_page'];
}
它只打印Displaying
而不是Displaying 10
。
如何修复此问题并让我的$ SiteConfiguration随处可访问?我应该使用class
吗?这里最好的做法是什么?
答案 0 :(得分:1)
把
global $SiteConfiguration;
在您的函数中,您可以在http://www.php.net/manual/en/language.variables.scope.php
找到更多信息因为您要求获得最佳实践信息:(最简单的形式)
class MySite{
public static function getConfig(){
return array(
'site_title => 'Wiki for Developers',
'mysql_host' => 'localhost',
'mysql_db' => 'wiki-devs',
'articles_per_page' => 10,
/* ... etc ... */
);
}
}
然后在您的代码中,您可以使用
进行调用$config = MySite::getConfig();
并使用它。 (显然有比MySite更好,更具描述性的名称;))
优点:
在我看来它击败了全局变量并且它通过参数传递,因为它更清晰,你可以控制所有形式的访问权限。您可以通过特定的getter / setter选项使某些属性可读/可写,并记录它被访问的次数以及您能想到的任何其他内容。
答案 1 :(得分:0)
function DisplayArticles() {
global $SiteConfiguration;
echo "Displaying ".$SiteConfiguration['articles_per_page'];
}
修改
你应该尽量避免使用全局变量。
更好的做法是在参数
中传递数组function DisplayArticles( array $config ) {
echo "Displaying ".$config['articles_per_page'];
}
$SiteConfiguration = array( 'site_title' => 'Wiki for Developers',
'mysql_host' => 'localhost',
'mysql_db' => 'wiki-devs',
'articles_per_page' => 10,
/* ... etc ... */
);
DisplayArticles( $SiteConfiguration );
答案 2 :(得分:0)
这是另一种配置类可以很好用的情况:
class Config {
private static $site_config = array( 'h' => 'Hello', 'w' => 'World');
public static function get( $key) {
return isset( self::$site_config[$key]) ? self::$site_config[$key] : null;
}
}
echo Config::get( 'h') . ' ' . Config::get( 'w');
这将输出:Hello World
答案 3 :(得分:0)
你可以尝试这样的事情。
您的“siteConfiguration.php”文件:
<?php
$SiteConfiguration = [
'site_title' => 'Wiki for Developers',
'mysql_host' => 'localhost',
'mysql_db' => 'wiki-devs',
'articles_per_page' => 10
];
return $SiteConfiguration;
?>
这个功能:
function getConfigVar($var) {
static $config = array();
if( empty($config) ) {
$config = require("siteConfiguration.php");
}
return array_key_exists($var, $config) ? $config[$var] : null;
}
此功能也可以修改为处理多个配置。