Codice PHP:
<?php
namespace util;


class 
Environment {
  protected 
$server_var = [];


    
/**
     *
     */
    
public function __get($key) {


      if (empty(
$this->server_var[$key])) {
        if (isset(
$_SERVER) && count($_SERVER) && !empty($_SERVER[$key]) && !is_array($_SERVER[$key])) {
          
$this->server_var[$key] = $_SERVER[$key];
        }
        elseif (isset(
$_ENV) && count($_ENV) && !empty($_ENV[$key]) && !is_array($_ENV[$key])) {
          
$this->server_var[$key] = $_ENV[$key];
        }
        else {
          
$this->server_var[$key] = @getenv($key);
        }
      }
      return 
$this->server_var[$key];
    }


    
/**
     *
     */
    
public function __set($key$value) {
      
      
$this->server_var[$key] = $value;
    }


}
Se faccio:
self::$environmentObj = new Environment;
echo self::$environmentObj->server_var['HTTP_HOST'];

Non stampa niente, anzi mi da errore perchè non ho definito la variabile in __set, ovviamente se faccio:


self::$environmentObj = new Environment;
self::$environmentObj->server_var['HTTP_HOST'] = 'Prova';
echo self::$environmentObj->server_var['HTTP_HOST'];

Stampa "prova" ma così perde di utilità, a quanto pare non posso definire una array dentro al metodo __get, giusto? si può ovviare?