Kod testowy:[php:1:f566288767]<?php
$x =& engine::loadExtinsion('Smarty', 'smarty/');
pa($x->_tpl_vars);
$x->_tpl_vars['aaa'] = "aaa";
$y =& engine::loadExtinsion('Smarty', 'smarty/');
$y->_tpl_vars['bbb'] = "bbb";
pa($x->_tpl_vars);
pa($y->_tpl_vars);
print '<hr>';
$a = &smarty::singleton();
$a->_tpl_vars = array();
$a->_tpl_vars['aaa'] = 'aaa';
$b = &smarty::singleton();
$b->_tpl_vars['bbb'] = 'bbb';
pa($a->_tpl_vars);
?>[/php:1:f566288767]
wynik:
Kod
Array
(
[SCRIPT_NAME] => /phpbb/index.php
)
Array
(
[SCRIPT_NAME] => /phpbb/index.php
[aaa] => aaa
)
Array
(
[SCRIPT_NAME] => /phpbb/index.php
[bbb] => bbb
)
_______________________________________
Array
(
[aaa] => aaa
[bbb] => bbb
)
(
[SCRIPT_NAME] => /phpbb/index.php
)
Array
(
[SCRIPT_NAME] => /phpbb/index.php
[aaa] => aaa
)
Array
(
[SCRIPT_NAME] => /phpbb/index.php
[bbb] => bbb
)
_______________________________________
Array
(
[aaa] => aaa
[bbb] => bbb
)
Jak pokazuje test przyczyna nie tkwi po stronie samego singletonu tylko po stronie metody loadExtinsion ktora jest wlasciwie aliasem do fabryki [php:1:f566288767]<?php
function &factory( $class, $type = "core" , $subDir ='') {
$class_ = (class_exists($class)) ? $class : engine::_autoloadClass($class, $type, $subDir);
if (!$class_) {
trigger_error (" [Core] Nie ma takiej klasy: <b>".$class."</b>", E_USER_ERROR);
}
return call_user_func(array( $class_ , "singleton"));
}
function &loadExtinsion( $class, $subDir = ''){
return engine::factory( $class, "extinsion", $subDir);
}
?>[/php:1:f566288767]
Obie metody maja zwracac referencje wiec niewiem gdzie po drodze traci sie instancja obiektu, sziedze nad tym juz dluzza chwile i mam pustke we lbie. Moze cos przeoczylem ?