par
naholyr » 26 mai 2007, 14:26
Pour répondre à la question initiale
il n'est pas possible de créer une superglobale à moins de patcher PHP.
Donc tout ce que tu peux faire c'est une variable GLOBALE...
suis-je obliger de mettre un global $_ZZZ dans toutes les autres fonctions où l'on se sert de $_ZZZ
Oui.
Une autre méthode peut-être plus propre pour ce que tu veux faire, c'est d'utiliser PHP5, la POO, et le Pattern Singleton (c'est la méthode Singleton::instance() ci-dessous) :
class Singleton
{
private $_array;
public function __construct() {
$this->_array = array();
}
static function instance() {
static $obj = null;
if ($obj === null) {
$obj = new Singleton();
}
return $obj;
}
public function __get($varname) {
return $this->_array[$varname];
}
public function __set($varname, $value) {
$this->_array[$varname] = $value;
}
}
On peut aussi ne pas mettre de méthode instance() dans la classe Singleton, mais la sortir pour en faire une fonction à part :
function SingletonInstance() {
...
}
Si on appelle cette fonction avec un nom court (genre ZZZ), ça permet d'appeler ZZZ() au lieu de Singleton::instance(), légèrement plus simple à mémoriser.
Utilisation, n'importe où même dans une fonction quelconque ou une autre classe :
ZZZ()->ma_variable = 35;
$variable = ZZZ()->ma_variable;
Pour répondre à la question initiale [b]il n'est pas possible de créer une superglobale[/b] à moins de patcher PHP.
Donc tout ce que tu peux faire c'est une variable GLOBALE...[quote]suis-je obliger de mettre un [b]global $_ZZZ[/b] dans toutes les autres fonctions où l'on se sert de $_ZZZ[/quote]Oui.
Une autre méthode peut-être plus propre pour ce que tu veux faire, c'est d'utiliser PHP5, la POO, et le Pattern Singleton (c'est la méthode Singleton::instance() ci-dessous) :
[php]class Singleton
{
private $_array;
public function __construct() {
$this->_array = array();
}
static function instance() {
static $obj = null;
if ($obj === null) {
$obj = new Singleton();
}
return $obj;
}
public function __get($varname) {
return $this->_array[$varname];
}
public function __set($varname, $value) {
$this->_array[$varname] = $value;
}
}[/php]
On peut aussi ne pas mettre de méthode instance() dans la classe Singleton, mais la sortir pour en faire une fonction à part :[php]function SingletonInstance() {
...
}[/php]
Si on appelle cette fonction avec un nom court (genre ZZZ), ça permet d'appeler ZZZ() au lieu de Singleton::instance(), légèrement plus simple à mémoriser.
Utilisation, n'importe où même dans une fonction quelconque ou une autre classe :
[php]ZZZ()->ma_variable = 35;
$variable = ZZZ()->ma_variable;[/php]