par
titerm » 03 août 2006, 16:09
Dans la mesure du possible, il est quand meme préférable d'éviter d'avoir recour a des globales.
Si tu dois partager des données entre plusieurs objets indépendant, je te suggère de plutot exploiter le pattern registry
Ce qui donnerais un code du genre
// A peaufiner en gérant les doublont, etc...
class Registry {
static private $_registry = array();
static public function register($name, $obj) {
self::$_registry[$name] = $obj;
}
static public function registry($name) {
return self::$_registry[$name];
}
}
Dans ce cas, la var étant un tableau, elle est passée par valeur a la registry, il faudra donc gérer les tableau plus finement si tu veux pouvoir les modifier, ou plus simplement, les encapsuler dans un objet qui lui ne circule que par référence en php5.
$tmp= array('IMG0' => 'IMG0','IMG1' => 'IMG1');
Registry::register('lesimg',$tmp);
// a partir d'ici tmp ne sert plus, donc meme si tu es dans une fonction, cela n'a pas d'incidence
$core->addBehavior('adminInitWidgets',array('changeMarieBehaviors','initWidgets'));
class changeMarieBehaviors
{
public static function initWidgets(&$widgets)
{
// Recupération de la var depuis la registry
$lesimg = Registry::registry('lesimg');
$widgets->create('changeMarie',__('Change Marie'),array('tplChangeMarie','ChangeMarieWidget'));
$widgets->changeMarie->setting('imgdef',__('Image par defaut:'),'','combo',$lesimg);
}
}
Dans la mesure du possible, il est quand meme préférable d'éviter d'avoir recour a des globales.
Si tu dois partager des données entre plusieurs objets indépendant, je te suggère de plutot exploiter le pattern registry
Ce qui donnerais un code du genre
[php]
// A peaufiner en gérant les doublont, etc...
class Registry {
static private $_registry = array();
static public function register($name, $obj) {
self::$_registry[$name] = $obj;
}
static public function registry($name) {
return self::$_registry[$name];
}
}
[/php]
Dans ce cas, la var étant un tableau, elle est passée par valeur a la registry, il faudra donc gérer les tableau plus finement si tu veux pouvoir les modifier, ou plus simplement, les encapsuler dans un objet qui lui ne circule que par référence en php5.
[php]
$tmp= array('IMG0' => 'IMG0','IMG1' => 'IMG1');
Registry::register('lesimg',$tmp);
// a partir d'ici tmp ne sert plus, donc meme si tu es dans une fonction, cela n'a pas d'incidence
$core->addBehavior('adminInitWidgets',array('changeMarieBehaviors','initWidgets'));
class changeMarieBehaviors
{
public static function initWidgets(&$widgets)
{
// Recupération de la var depuis la registry
$lesimg = Registry::registry('lesimg');
$widgets->create('changeMarie',__('Change Marie'),array('tplChangeMarie','ChangeMarieWidget'));
$widgets->changeMarie->setting('imgdef',__('Image par defaut:'),'','combo',$lesimg);
}
}
[/php]