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?