Возврат массива из файла конфигурации в сценарий класса как свойство

У меня есть файл конфигурации, и я пытаюсь получить к нему доступ из класса конфигурации. Файл конфигурации содержит данные mysql в виде массива:

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

Я хочу иметь возможность доступа к этому массиву, используя что-то вроде Config :: get (‘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

Я не уверен, как установить свойство config с помощью возврата из файла require. Я получаю сообщение об ошибке «я использую $ this не в контексте объекта».
Как правильно установить переменную класса из include / require?

Дополнительный вопрос: рекомендуется ли устанавливать массив $ config из отдельного метода или в конструкторе классов?

0

Решение

Проблема в том, что вы ссылаетесь на $ this (ссылка на экземпляр) в статическом контексте. Либо избавьтесь от ключевого слова static, либо объявите статическую переменную $ config, а затем называйте ее статической :: $ config вместо $ this-> config.

1

Другие решения

Ты можешь использовать 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')
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector