Заметил что far-free часто встречается использование ссылок
fatfreeframework.com/framework-variables
каждый раз когда надо что то добавить или изменить
он создает ссылки, напр простой код
$f3->set('key1.key2', 'val');
$f3->get('key1.key2');
$f3->set('key1', 'val1');
$f3->set('colors',array('red','blue','yellow'));
$f3->push('colors','green'); // works like PHP's array_push()
echo $f3->pop('colors'); // returns 'green'
это удобно, но во всех случаях происходит такое (метод ref)
$var=&$this->hive; // array([key1] => array([key2] =
$var=&$var->$part;//part key1
$var=&$var->$part;//part key2
return $var;
//после массив выглядит как
array(&[key1] => array(&[key2] =
полный код метода &ref($key,$add=TRUE)
function &ref($key,$add=TRUE) {
$null=NULL;
$parts=$this->cut($key);
//...
if ($add)
$var=&$this->hive;
else
$var=$this->hive;
$obj=FALSE;
foreach ($parts as $part)
if ($part=='->')
$obj=TRUE;
elseif ($obj) {
$obj=FALSE;
if (!is_object($var))
$var=new stdclass;
if ($add || property_exists($var,$part))
$var=&$var->$part;
else {
$var=&$null;
break;
}
}
else {
if (!is_array($var))
$var=array();
if ($add || array_key_exists($part,$var))
$var=&$var[$part];
else {
$var=&$null;
break;
}
}
//...
return $var;
}