2013-10-26 3 views
0

비밀번호에 민감한 정보를 별도의 .php 파일에 저장하려고합니다. 그 파일을 다른 PHP 파일에 포함시킬 수 있습니다. (우리는 php2.php라고합니다)개인 정적 배열 내부에서 변수를 반향하려고합니다. 포함

문제는 php1.php에서 사용하려고 시도하는 코드가 php2.php 페이지에 지정되어 있습니다. 배열 밖에서 변수를 에코 할 수 있고 문제없이 표시 할 수 있습니다. 필자는 PHP를 배우기 시작하면서 문법 오류라고 확신합니다.

도움을 주시면 감사하겠습니다. 찾고있어 줘서 고마워.

편집 : 업데이트!

다음은 64 행에서 오류가 발생하는 작업의 코드 전체 페이지입니다.

<?php 

     require_once 'login.php'; 


     // dota2 api key (you can get_info it here - http://steamcommunity.com/dev/apikey) 
     $APIkey; 

     //The language to retrieve results in (see http://en.wikipedia.org/wiki/ISO_639-1 for the language codes (first two characters) and http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes for the country codes (last two characters)) 
     define ('LANGUAGE', 'en_us'); 

     error_reporting(0); 

     set_time_limit(0); 

     /** 
     * Basic class with system's configuration data 
     */ 
     class LoginInfo { 
      /** 
      * Configuration data 
      * @access private 
      * @static 
      * @var array 
      */ 

       private static $_data = array(
        'APIkey' => '', 
        'db_user' => '', 
        'db_pass' => '', 
        'db_host' => '', 
        'db_name' => '', 
        'db_table_prefix' => '' 
       ); 

       public static function SetVar ($APIkey, $dbuser, $dbpass, $dbhost, $dbname, $Prefix = null){ 
        self:: $_data['APIkey'] = $APIkey; 
        self:: $_data['db_user'] = $dbuser; 
        self:: $_data['db_pass'] = $dbpass; 
        self:: $_data['db_host'] = $dbhost; 
        self:: $_data['db_name'] = $dbname; 
        if ($Prefix === null){ 
         self::$_data['db_table_prefix'] = ''; 
        }else{ 
         self::$_data['db_table_prefix'] = $Prefix; 
        } 
       } 

       public static function GetInfo(){ 
        return self::$_data; 
       } 


      /** 
      * Private construct to avoid object initializing 
      * @access private 
      */ 
      private function __construct() {} 
      public static function init() { 
       self::$_data['base_path'] = dirname(__FILE__).DIRECTORY_SEPARATOR.'includes'; 
       $db = db::obtain(echo LoginInfo::GetInfo()['db_user'], echo LoginInfo::GetInfo()['db_pass'], echo LoginInfo::GetInfo()['db_host'], echo LoginInfo::GetInfo()['db_name'], echo LoginInfo::GetInfo()['db_user']); 
       if (!$db->connect_pdo()) { 
        die(); 
       }; 
      } 
      /** 
      * Get configuration parameter by key 
      * @param string $key data-array key 
      * @return null 
      */ 
      public static function get($key) { 
       if(isset(self::$_data[$key])) { 
        return self::$_data[$key]; 
       } 
       return null; 
      } 
     } 

     config::init(); 

     function __autoload($class) { 
      scan(config::get('base_path'), $class); 
     } 

     function scan($path = '.', $class) { 
      $ignore = array('.', '..'); 
      $dh = opendir($path); 
      while(false !== ($file = readdir($dh))){ 
       if(!in_array($file, $ignore)) { 
        if(is_dir($path.DIRECTORY_SEPARATOR.$file)) { 
         scan($path.DIRECTORY_SEPARATOR.$file, $class); 
        } 
        else { 
         if ($file === 'class.'.$class.'.php') { 
          require_once($path.DIRECTORY_SEPARATOR.$file); 
          return; 
         } 
        } 
       } 
      } 
      closedir($dh); 
     } 
?> 
+0

오, 지금 당신의 질문을 이해 :

echo Random::GetInfo()['db_user']; 

하지만 당신은 위의 호출 형식을 지원하지 않는 PHP의 이전 버전을 사용하는 경우

. – Kiruse

+0

필자는 가 문제이며 echo $ variable을 사용하여 시도했지만 " '안에 싫어합니다. – Tandar

답변

1

은 당신의 접근 방식에 문제가있다 : 오브젝트의 구성원 속성은 기본값 등의 표현을 허용하지 않습니다.

는 내 말은 다음과 같습니다

<?php 
$foo = 'foo'; 
$bar = 'bar'; 

class Clazz { 
    public $foo = $bar; 
    static private $_data = array(
     'foo' => $foo, 
     'bar' => $bar 
    ); 
} 

이 코드 here을 시도하고 직접 참조하십시오. 모든 선언은 unexpected T_VARIABLE의 구문 오류입니다.

귀하의 경우에는 초기화 메소드 또는 해당 생성자에 $_data을 설정하는 싱글 톤과 같은 다른 접근 방식이 필요합니다.

예 :

<?php 
$foo = 'foo'; 
$bar = 'bar'; 

class Clazz { 
    public $foo = ''; 

    static private $_data = array(
     'foo' => '', 
     'bar' => '' 
    ); 
    static private $_ininiated = false; 

    static public function init() { 
     if(!self::$_initiated) { 
      self::$_data = array(
       'foo' => $foo, 
       'bar' => $bar 
      ); 
      self::$_initiated = true; 
     } 
    } 
} 

싱글 예 :

<?php 
$foo = 'foo'; 
$bar = 'bar'; 

class Clazz { 

    static private $instance = null; 

    private $_data = array(); 

    private function __construct() { 
     $this->_data = array(
      'foo' => $foo, 
      'bar' => $bar 
     ); 
    } 

    public function getData($name) { 
     return isset($this->data[$name]) ? $this->data[$name] : null; 
    } 


    static public function getInstance() { 
     if(self::$instance == null) { 
      self::$instance = new self; 
     } 
     return self::$instance; 
    } 

} 

echo Clazz::getInstance()->getData('foo'); 
0

당신이 (클래스에 private static

class Random { 
    private static $_Data = array(
     'db_user' => '', 
     'db_pass' => '', 
     'db_host' => '', 
     'db_name' => '', 
     'db_table_prefix' => '' 
    ); 

    public static function SetVar ($Host,$User,$Pass,$DB,$Prefix = null){ 
     self::$_Data['db_user'] = $User; 
     self::$_Data['db_pass'] = $Pass; 
     self::$_Data['db_host'] = $Host; 
     self::$_Data['db_name'] = $DB; 
     if ($Prefix === null){ 
      self::$_Data['db_table_prefix'] = ''; 
     }else{ 
      self::$_Data['db_table_prefix'] = $Prefix; 
     } 

    } 

    public static function GetInfo(){ 
     return self::$_Data; 
    } 

} 

의 따라서 수당이있는 가정 그리고 다음과 같은 전화 :

심지어 액세스

Random::SetVar("Test","Test","Test","Test"); 
print_r(Random::GetInfo()); 
:

$Var = Random::GetInfo(); 
echo $Var['db_user']; 
+0

다른 라인 (64)에서 오류가 발생했습니다. 그것은 (echo .....)를 사용하는 것을 좋아하지 않습니다. 페이지의 전체 코드는 다음과 같습니다. 코멘트에 코드를 게시 할 수 없으므로 원래 붙여 넣은 질문을 보시기 바랍니다. 감사! – Tandar

+0

@Tandar 아직도이 문제가 발생하는 경우 지금까지 회신하지 않으신 것에 대해 사과드립니다. 너의 고집이 아직도 나는 너의 봉사에있는 경우에 알려주 십시요 –

+0

안녕하세요! 그래, 괜찮아. 모두가 할 일이 있다는 것을 알고있다. 나는 계속 그 일을 고쳤다.하지만 많은 진전을 이루지 못했고, 더 이상 도움을 얻을 수 없었다. 나는 다시 시작하고 다른 방법을 사용하는 것을 고려했다. – Tandar

관련 문제