2010-01-23 60 views
0

下面是PHP中的文件,我試圖包含一個文件,該文件將數組保存到我的類中,然後訪問該數組。如果我運行print_r()我會得到結果,但如果我嘗試單獨訪問數組項,我什麼都得不到,任何人都可以幫助我嗎?如何訪問此PHP數組的內容?

<?php 
// config.class.php 
/* 
example usages 
$config = Config::getInstance(PATH_TO_CONFIG_FILE, FILE_TYPE); 
echo $config->url; 
echo $config->test; 
echo $config->ip; 
*/ 

class Config 
{ 
    private static $instance = null; 
    private $options = array(); 

    /** 
    * Retrieves php array file, json file, or ini file and builds array 
    * @param $filepath Full path to where the file is located 
    * @param $type is the type of file. can be "ARRAY" "JSON" "INI" 
    */ 
    private function __construct($filepath, $type = 'ARRAY') 
    { 
     switch($type) { 
      case 'ARRAY': 
       $this->options = include $filepath; 
       break; 

      case 'INI': 
       $this->options = parse_ini_file($filepath, true); 
       break; 

      case 'JSON': 
       $this->options = json_decode(file_get_contents($filepath), true); 
       break;  
     } 
    } 

    private function __clone(){} 

    public function getInstance($filepath, $type = 'ARRAY') 
    { 
     if (null === self::$instance) { 
      self::$instance = new self($filepath, $type = 'ARRAY'); 
     } 
     return self::$instance; 
    } 

    /** 
    * Retrieve value with constants being a higher priority 
    * @param $key Array Key to get 
    */ 
    public function __get($key) 
    { 
     if (isset($this->options[$key])) { 
      return $this->options[$key]; 
     } 
    } 

    /** 
    * Set a new or update a key/value pair 
    * @param $key Key to set 
    * @param $value Value to set 
    */ 
    public function __set($key, $value) 
    { 
     $this->options[$key] = $value; 
    } 

} 
?> 

這裏是config_array.ini.php文件...

<?php 
/** 
* @Filename config_array.ini.php 
* @description Array to return to our config class 
*/ 
return array(
    'ip' => $_SERVER['REMOTE_ADDR'], 
    'url' => 'http://www.foo.com', 
    'db' => array(
     'host' => 'foo.com', 
     'port' => 3306 
    ), 
    'caching' => array(
     'enabled' => false 
    ) 
); 
?> 

這裏就是我試圖做...

<?PHP 
    $config = Config::getInstance('config_array.inc.php', 'ARRAY'); 

    // this does not show anything 
    echo $config->ip; 

    // this works 
    print_r($config); 
    ?> 

回答

2

你的代碼對我來說工作得很好。
檢查你的PHP版本,這是__get V5.2.0後支持

echo $config->ip; // displays fine 127.0.0.1 
+0

我只是在裏面運行它我使用PHP 5.2.5的IDE phpdesigner如果我嘗試運行echo $ config-> ip,則不會發生錯誤;但它只是顯示一個空白屏幕。然後我在運行PHP 5.2.9的localhost的瀏覽器中嘗試了它,它工作得很好 – JasonDavis 2010-01-23 22:58:21

1

它返回一個數組等等使用...

echo $config['ip']; 
+0

我明白了,反正是有把我的數組組$ config-> IP與__get()? – JasonDavis 2010-01-23 22:27:58

+0

其實我只是試過這個,我得到這個錯誤致命錯誤:不能使用類型配置對象作爲數組 – JasonDavis 2010-01-23 22:29:46

1

- >用於類成員。你沒有一個類,你有一個數組,所以使用括號代替($ config [xxxx]而不是$ config-> xxxx)。

+0

我只是試過,但得到...致命錯誤:不能使用配置類型的對象作爲數組 – JasonDavis 2010-01-23 22:31:00