通过项目传递数组

时间:2014-06-13 16:51:43

标签: php arrays global

每个人都拥有它,一个需要在整个项目中访问的数组或对象。这可以是设置,用户数据数组或其他任何不符合定义变量的条件(导致定义的数组都不好)。

我可能不是在寻找合适类型的东西,但我需要一种方法来访问每个类,函数或页面中的对象。

因此,例如,让我说我有一个标准的配置文件:

<?php
return array(
    'database' => array(
        'driver' => 'mysql',
        'mysql' => array(
           'host' => 'localhost',
           ...
        ),
        'mongodb' => array(
            'host' => 'localhost',
            ...
        ),
        ...
    ),
);
?>

我这样做:

$config = (require('path/file.php'));

所以,现在我有了我的配置。但这不会传递。我不想调用“$ config =(require('path / file.php'));”每次我需要一个设置。

所以有没有办法总是只调用一次,例如,将它存储在一个类或其他东西中(而不必一直明确地定义该类,导致这一点失败)。

现在我知道全局变量了。但出于几个原因,我并不是真的偏爱它们。 Mysql不是一个选项,因为它是一个配置文件,用户需要能够在启动之前改变它。

3 个答案:

答案 0 :(得分:2)

未经测试

在Config.php中

class Config
{
    public static function get()
    {
        return array(
            'database' => array(
                'driver' => 'mysql',
                'mysql' => array(
                    'host' => 'localhost',
                    ...
                ),
                'mongodb' => array(
                    'host' => 'localhost',
                    ...
                ),
                ...        
            ),
        );
    }
}

在index.php中:

function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

在文件中你想要你的conf:

$myConf = Config::get();

您还可以改进课程以轻松获取特定的配置数据

答案 1 :(得分:0)

<?php

class config {
    public static $driver = "mysql";
    public static $host = "localhost";
}

echo config::$driver;

如果您的目标是返回整个数组,请按照niconoes示例。

如果您不想制作对象,可以像上面发布的代码一样进行。它快速而简单。

答案 2 :(得分:0)

所以最后这是我的解决方案,它基于松散的niconoe,或者至少来自他的答案。

的Class1

Class Class1 {

    public static $conf = null;

    public function __construct($config) {
        self::$conf = $config;
    }

}

的Class2

Class Class2 extends Class1 {

    public function conf() {
        return self::$conf;
    }

}

索引

// Your custom class dir
define('CLASS_DIR', 'classes/');

// Add your class dir to include path
set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR);

// Load all classes
spl_autoload_extensions('.class.php');

// Use default autoload implementation
spl_autoload_register();

// define the config (for now a string, but array is possible too
$cClass2 = new Class2('config');

// echo the variable in Class1 by requesting a Class2 function
echo Class2::conf();

Outputs "config"

这样可以在类之间传递变量并立即加载所有变量。

我很想听到一些评论,看到我还在学习并欣赏你的所有观点。