2017-10-24 18 views
0

구성 파일이 있는데 구성 클래스에서 액세스하려고합니다. 설정 파일은 배열로 MySQL의 데이터를 가지고 :구성 파일에서 클래스 스크립트로 배열을 속성으로 반환

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

내가 구성과 같은 : 수 ('mysql을/호스트)를 사용하여이 배열에 액세스 할 수 있어야합니다. 다음은 클래스 스크립트입니다.

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를 사용하지 않는다"는 오류가 발생합니다.
include/require에서 클래스 변수를 올바르게 설정하는 방법은 무엇입니까?

보너스 질문 : 별도의 메서드 또는 클래스 생성자에서 $ config 배열을 설정하는 것이 좋습니다?

답변

1

문제는 정적 컨텍스트에서 $ this (인스턴스 참조)를 말하는 것입니다. "static"키워드를 제거하거나 $ config 정적을 선언 한 다음 $ this-> config 대신 static :: $ config로 참조하십시오.

0

spl_autoload_register을 사용하면 모든 클래스에 구성을 필요로하지 않고도 클래스를 초기화 할 수 있습니다.

난 당신이 단순히 내가 그 인상을

Config::get('mysql/host') 
Config::get('mysql/dbname') 
Config::get('mysql/username') 
Config::get('mysql/password') 
+0

했다 호출 할 수 있습니다 대신 $this->config = require_once("configuration.php");의 호출 할 수

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) { }*/ } } } } 

그래서 내 폴더에 자동 로딩에 대한 모든 클래스를 사용하는 것입니다 글로벌 범위에서 그러한 종류의 정보를 포함하는 것이 안전하지 않았으며 공용이 아닌 디렉토리의 ini/구성 파일에 저장하는 것이 가장 좋습니다. –