如何从PHP访问PHP中的全局$ SiteConfiguration变量?

时间:2012-06-16 00:53:18

标签: php scope configuration-files

我在所有页面上共享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吗?这里最好的做法是什么?

4 个答案:

答案 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更好,更具描述性的名称;))

优点:

  1. 你的php类autoloader会自动为你加载它,如果设置正确并且可以找到你的类,这意味着你不必担心你传递了一个变量,不用担心函数参数的放置而不会因为不必要而污染你的函数这些论据无助于描述它的作用。
  2. 您可以完全控制对此数据的访问,并且可以使其即使您自己的函数也不会意外地更改此数据,即使在调用其他需要访问它的函数时也是如此。
  3. 在我看来它击败了全局变量并且它通过参数传递,因为它更清晰,你可以控制所有形式的访问权限。您可以通过特定的getter / setter选项使某些属性可读/可写,并记录它被访问的次数以及您能想到的任何其他内容。

答案 1 :(得分:0)

use global keyword

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

此功能也可以修改为处理多个配置。