将数组从配置文件返回到类脚本作为属性

时间:2017-10-24 00:41:27

标签: php class oop multidimensional-array configuration-files

我有一个配置文件,我试图从配置类访问它。配置文件将mysql数据作为数组:

<?php
  $config = array(
   'mysql' => array(
    'host' => 'localhost',
    'user' => 'test',
    'pass' => 'pass',
    'db' => 'test'
    )
  );
  return $config;

我希望能够使用Config :: get(&#39; mysql / host)之类的东西来访问这个数组。这是类脚本:

class Config {
  public $config = null;

  public static function get($path = null) {
    $this->config = require_once("configuration.php");

    print_r($this->config);
    if($path) {

      $path = explode('/', $path);

      foreach($path as $bit) {
       if(isset($config[$bit])) {
        $config = $config[$bit];
       } //End isset
      } //End foreach

      return $_config;

     } //End if path
   } //End method
  } //End class

我不确定如何使用require文件的返回来设置config属性。我收到一个错误,我正在使用$ this而不是在对象上下文&#34; 如何从include / require?

正确设置类变量

额外问题:是否建议从单独的方法或类构造函数中设置$ config数组?

2 个答案:

答案 0 :(得分:1)

问题是你在静态上下文中引用$ this(实例引用)。要么摆脱“static”关键字,要么声明$ config static,然后将其称为static :: $ config而不是$ this-&gt; config。

答案 1 :(得分:0)

您可以使用spl_autoload_register来初始化类,而无需在每个类中使用这些配置。

这是我用来自动加载我文件夹中所有类的内容

define('__ROOT__', dirname(dirname(__FILE__)));
$GLOBALS['config'] = array(
  'mysql' => array(
    'host' => 'host',
    'username' => 'root',
    'password' => '',
    'dbname'   => 'dbname'
  )
);



spl_autoload_register('autoload');

function autoload($class , $dir = null){
  if(is_null($dir)){
    $dir = __ROOT__.'/class/';
  }
  foreach ( array_diff(scandir($dir), array('.', '..'))  as $file) {
    if(is_dir($dir.$file)){
      autoload($class, $dir.$file.'/');
    }else{
      if ( substr( $file, 0, 2 ) !== '._' && preg_match( "/.php$/i" , $file ) ) {
        include $dir . $file;
        // filename matches class?
        /*if ( str_replace( '.php', '', $file ) == $class || str_replace( '.class.php', '', $file ) == $class ) {
        }*/
      }
    }
  }
}

因此,您可以拨打电话而不是$this->config = require_once("configuration.php");,只需拨打电话

即可
Config::get('mysql/host')
Config::get('mysql/dbname')
Config::get('mysql/username')
Config::get('mysql/password')